Niski poziom vs wysoki poziom

0

Deus nie odchodź! Co my bez Ciebie zrobimy..? 4p już nie będzie takie samo bez Deusa... ;)

0
MarekR22 napisał(a)

Programista "wysoko pozimowy" ma stworzyć aplikację szybko i niezawodnie, więc kompilator/biblioteki dostarczają mu tonę gotowych uniwersalnych rozwiązań (wyjątki, obiekty, garbege colector). To jest programowanie jak w fabryce.

Nie czuję się, żebym programował jak w fabryce. Codziennie robię coś innego, uczę się ciekawych rzeczy. Jako programista "wysokopoziomowy" robię coś, z czego bezpośrednio będą korzystali ludzie. Zapewnienie im możliwości pracy np. poprzez stworzenie GUI spełniającego ich wszystkie, nieraz dziwne zachcianki nie zawsze bywa szybkie i łatwe. Zwłaszcza że często okazuje się, że te gotowe i uniwersalne rozwiązania w jakiejś realnej sytuacji nie spełniają wymagań.

Programista nisko pozimowy najczęściej musi pracować ze sprzętem i musi dbać o wydajność aplikacji (nie zapominając o obsłudze błędów, która musi zrobić sam, bo nie ma do dyspozycji wyjątków).

A wysokopoziomowy to nie musi dbać o wydajność?! Musi, tylko ta wydajność polega na czym innym - nie wykonywać niepotrzebnych operacji, nie tworzyć zbędnych obiektów, użyć biblioteki/klasy/metody najwydajniejszej w danym zastosowaniu, nie przeciążać bazy danych zbędnymi zapytaniami, itp.
Zaś obsługa błędów to tylko narzędzie i też trzeba umieć jej używać.

Nie ma co kryć zakres wiedzy i sprawność umysłowa takiego człowieka musi być o wiele większa.

Zakres wiedzy jest po prostu inny, a co do sprawności - myślą po prostu o innych rzeczach, tego nie ma jak porównać.

0
cyber_pl napisał(a)

Co to ma do rzeczy znam niemalze kazdy jezyk, jestem rozgarniety i znam dobrze angielski. A projektow i tak nie wypisze bo nic wam do tego.

A to do tego że w większości twoich postach widzimy że twoje 'doświadczenie' pochodzi z robienia zabawek nie używanych przez nikogo. poza tym takie cechy weryfikuje rzeczywistość (a.k.a. projekty) a nie twoje domniemanie o samym sobie.

Większość osób, z którymi się kłócisz pracują w realnym świecie, dla prawdziwych użytkowników, z nałożonym terminem, uzgodnionym zakresem funcjonalności i określonym budżetem. Każdy z nich już wyrósł z umierania za nieistotne sprawy. Nie mal żaden z nich nie miał takiego tupetu jak ty kiedy dopiero raczkował.

Co do twojego oskarżenia że wszyscy tu leją wodę to chyba wynika z faktu że jak ktoś zada ci konkretne pytanie to go albo unikasz albo ignorujesz.

0

Programista nisko pozimowy najczęściej musi pracować ze sprzętem i musi dbać o wydajność aplikacji (nie zapominając o obsłudze błędów, która musi zrobić sam, bo nie ma do dyspozycji wyjątków). W praktyce sprowadza się to wyłącznie do obsługo sprzętu (zwykle sterowników).

Wyjątki to potężne narzędzie i wcale nie takie łatwe do użycia. Kiedy rzucić wyjątek, kiedy go obsłużyć, jakie zasoby trzeba pozwalniać przed przepchnięciem wyjątku wyżej itp. Dużo łatwiej zasyfić kod ifami sprawdzającymi kody powrotu. Z resztą nawet tego się specjalnie nie robi. Malloc Linuksa nigdy nie zwróci NULLa - wiesz czemu? Bo twórcy stwierdzili, że i tak nikt nie sprawdza czy malloc się powiódł czy nie więc można wprowadzić leniwą alokację pamięci (przy pierwszym odwołaniu do niej).
A dbać o wydajność aplikacji to praktycznie każdy musi, tyle że w wysokim poziomie nie robi się tego na poziomi instrkucji tylko na poziomie algorytmów i designu. Chyba tylko w aplikacjach desktopowych nie trzeba się tak przejmować wydajnością a i pewnie to stwierdzenie nie jest do końca prawdziwe.

Nie ma co kryć zakres wiedzy i sprawność umysłowa takiego człowieka musi być o wiele większa.

Naprawde nie wiem skąd ten wniosek. Czy żonglowanie bitami według ustalonej specyfikacji jest takie trudne?

0

Pomijając dyskusję dwóch kolegów.

Moim zdaniem taki asembler a c++/pascal/czy inny podobny język to dwie zupełnie różne bajki, nie da się tego do końca porównywać. Dwa języki, wykorzystywane do w zasadzie dwóch różnych rzeczy. To trochę jak porównywać c++ i PHP, przyczym te języki mają chociaż podobną składnie.

Wbrew temu co uważa wiele osób sam c++, nie generuje kodu znacznie gorsze od kodu w asmie. Owszem zdarza mu się dodawać zbędne instrukcje ale kod jaki generuje nie jest tak zły jak próbują wmówić niektóre osoby. Co więcej kiepski / niedoświadczony programista asma który nie wie co robi xor rax,rax generuje często gorszy kod.

Samo mówienie o językach niższego wyższego poziomy jest bardzo niekonkretne, ponieważ nie jest jasno opisane gdzie zaczynają się języki niskiego poziomu a gdzie zaczynają wysokiego. Jeśli chcemy żeby inni nas zrozumieli lub chociaż uniknąć nieporozumień powinniśmy porównywać języki w jakiś grupach lub jakieś dwa konkretne między sobą.

Sam język czy poziom zależy moim zdaniem od zastosowania, budżetu itp.

0

To jest jak kopanie dołów, można łopatą(niskopoziomowo) ale można też koparką(wysokopoziomowo). Koparka niby przyspiesza sprawę ale najpierw trzeba się nauczyć ją obsługiwać niemniej nieumiejętnie używana łopata tez moze sie złamać.

Pozdro.

0

Języki niskopoziomowe są - jak sama nazwa wskazuje - dla niskopoziomowych (intelektualnie) ludzi.
Asembler to najprostszy język programowania ze wszystkich istniejących.

0

Ja programuję aktualnie w C++/Qt i SQLu,a wcześniej pasjonowałem się asemblerem.
Każdy z tych języków ma swoje mocne i słabsze strony,lecz moim zdaniem nieutrafionym jest tkwić jest na stanowisku,że któryś z języków jest "da best"-może być lepszy,ale tylko w konkretnej sytuacji,i innej lepszy będzie drugi.
Ze swego doświadczenia zaobserwowałem też,że asembler mimo wszystko dobrze jest znać (jakże mnie bawią twierdzenia,że goto jest be,i zawsze trzeba go unikać :-D ),a także technikę programowania hybrydowego asembler-C++,i pisać głównie w C++,z asemblera korzystając w razie potrzeby poprzez np wstawki _asm optymalizujące pętle,albo jakieś zewnętrzne funkcje skompilowane do .obj

0

Podaj przykład w którym lepiej użyć goto zamiast jakieś strukturalnej konstrukcji.
Ja znam tylko jeden: wyskakiwanie z zagnieżdżonych pętli, wątpie żeby był inny przypadek w którym goto może się przydać.

0

A ja nie znam - zagniezdzone petle wrzuca sie w metody/funkcje i jest czytelniej i jasniej i do tego bez mydlenia oczu goto.

A co do porownania. Niski poziom ma swoje bolaczki (duuuzo trzeba robic samemu), wyzszy ma swoje - dochodzi kwestia szerszej architektury, czesto wiekszej ilosci warstw, ciezej sie w tym polapac. Ktos, kto twierdzi, ze programowanie na wyzszym poziomie jest latwe, bo wystarczy klikac, nigdy nie widzial projektow pisanych przez co najmniej 3 osoby dluzej niz miesiac. Ani nie musial szukac bledow logicznych a duzej aplikacji, gdzie ktos zwalil architekture. Nie liczy sie wtedy jezyk, a zrozumienie dzialania aplikacji i PRZEDE WSZYSTKIM poprawka taka, zeby nic nie zepsuc.

Ja szukalem zarowno wyciekow czy naruszenia pamieci w duzych aplikacjach c++, jak i bledow logicznych w ladnych aplikacjach c#. I zadne nie jest latwe. A do pierwszego nie przydaje sie znajomosc asma, bo dostaje ladny zrzut pamieci, ktory sobie pozniej odpalam z aplikacja i dostaje na tacy, gdzie i ktory kawalek pamieci juz nie jest dostepny. Tyle, ze to i tak nie wszystko, bo jak zwykle blad tkwi pewnie w instrukcji wykonanej 1000 cykli wczesniej. W duzej aplikacji wielowatkowej nie wyobrazam sobie przegladania kodu asma w poszukiwaniu takiego bledu.

0
johny_bravo napisał(a)

A ja nie znam - zagniezdzone petle wrzuca sie w metody/funkcje i jest czytelniej i jasniej i do tego bez mydlenia oczu goto.

Wiesz ile cykli procesora i pamięci na stosie marnujesz na takie wywoływanie funkcji? Jaka to ogromna strata wydajności? Nie jesteś pr0 ;P

0
somekind napisał(a)
johny_bravo napisał(a)

A ja nie znam - zagniezdzone petle wrzuca sie w metody/funkcje i jest czytelniej i jasniej i do tego bez mydlenia oczu goto.

Wiesz ile cykli procesora i pamięci na stosie marnujesz na takie wywoływanie funkcji? Jaka to ogromna strata wydajności? Nie jesteś pr0 ;P

Noooo, az sie przejalem ;P Straszne stracic 5 cykli proca na "optymalizacje", zeby pozniej zyskac roboczogodzine kolegi z pracy na kazde zerkniecie w taki kod ;)

0

Szczególnie przy nowoczesnych kompilatorach, które mogą kod poskładać bądź podzielić wedle swoich przekonań. O generowaniu kodu w czasie linkowania nawet nie wspominam. Struktura kodu w językach wysokiego poziomu nie ma bezpośredniego przełożenia na niskopoziomową reprezentację.

0
... napisał(a)

Struktura kodu w językach wysokiego poziomu nie ma bezpośredniego przełożenia na niskopoziomową reprezentację.

milcz heretyku, cyber_pl i tak ci udowodni ze jest inaczej [diabel]

0

first.cpp:

#include "first.h"

int sum(int x, int y)
{
	return x + y;
}

first.h:

#ifndef FIRST_H
#define FIRST_H

int sum(int x, int y);

#endif FIRST_H

second.cpp:

#include "first.h"
#include "second.h"

int callSum()
{
	return sum(69, 666);
}

second.h:

#ifndef SECOND_H
#define SECOND_H

int callSum();

#endif

main.cpp:

#include <iostream>
#include "second.h"

int main()
{
	std::cout << callSum() << std::endl;
}

listing z debuggera:

int main()
{
	std::cout << callSum() << std::endl;
00401000  mov         eax,dword ptr [__imp_std::endl (40203Ch)] 
00401005  mov         ecx,dword ptr [__imp_std::cout (402044h)] 
0040100B  push        eax  
0040100C  push        2DFh 
00401011  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (402040h)] 
00401017  mov         ecx,eax 
00401019  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (402038h)] 
}
0040101F  xor         eax,eax 
00401021  ret            

Prosty projekt budowany pod Visualem. Kod podzielony na kilka funkcji w różnych modułach - podczas generacji kodu w czasie linkowania zredukowane do wyliczonej wartości.

cyber_pl nie udowodni, z jednego z innych serwisów:

cyber - 13-10-19:49 -- znikam z sieci na jakis czas, wyjezdzam w c**** daleko za granice
cyber - 13-10-19:49 -- moze bede za miesiac nie wiem na razie ludzie

0

Pewnie wyjechał inżyniera robić ;)

0

Może poszedł za radą somekinda...

somekind napisał(a)

@cyber_pl - masz rację z tym .NET i z tym, że jest beznadziejnie niewydajny. Myślałeś może już o tym, żeby pojechać do Redmont i dokonać aktu samospalenia przed siedzibą M$ w proteście przeciwko temu, że coś takiego wymyślili?

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