Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Niskopoziomowo vs wysokopoziomowo

And! 03 Feb 2018 10:49 3831 14
  • Niskopoziomowo vs wysokopoziomowo
    Cyklicznie trafiam na dyskusje próbujące określić, co jest lepsze - podejście niskopoziomowe czy użycie gotowych platform / frameworków. Ostatnio zastanawiam się, czy taka ogólna dyskusja ma jakiś sens? Przy ściśle określonym przypadku można dyskutować, jakie rozwiązanie jest lepsze pod względem ekonomicznym/bezpieczeństwa/wydajności itp. Natomiast przy dyskusji ogólnej raczej nie da się wskazać rozwiązania najlepszego / do wszystkiego.

    Co o tym myślicie?



    Częstym tematem jest porównanie platformy typu Arduino z wykorzystaniem określonego mikrokontrolera i wyciśnięcia z niego maksimum możliwości z użyciem C/C++ lub nawet asemblera i operacjami na rejestrach / dostępem do peryferiów. Podobnie wypada porównanie gotowych platform sprzętowych np. Raspberry Pi czy określonych modułów opartych o ESP8266/ESP32 a swojego rozwiązania i projektu PCB szytego na miarę. W świecie programowania zdarzają się porównania implementacji na C# / Python / Java. Ścierają się rozwiązania bazodanowe, systemy operacyjne itp.

    Użycie gotowej platformy / bibliotek przyspiesza wprowadzenie projektu w fazę, gdy zrealizowana jest większość funkcjonalności. Im bardziej skomplikowane rozwiązanie, tym większe ryzyko błędów / luk bezpieczeństwa oraz mniejszej wydajności. Użycie natywnych rozwiązań to szansa na podniesienie wydajności, możliwość wyeliminowania błędów, jednak potrzebujemy do tego więcej czasu.
    Głośne ostatnio luki Spectre i Meltdown, podobnie jak Row hammer, pokazują, że błąd może znajdować się bardzo blisko sprzętu i być niewykryty przez bardzo długi czas. Nie możemy każdego projektu rozpoczynać od 0, są gotowe rozwiązania uważane za bezpieczne i będące powszechnym standardem.
    Atak KRACK na WiFi pokazuje, że w powszechnie stosowanym rozwiązaniu nagle może zostać wykryta luka.
    Co możemy zrobić? Możemy od początku w projekcie stosować warstwy. Jeżeli nasze rozwiązanie łączy się do WiFi do publicznej sieci internet przesyłając poufne dane, to te dane możemy zamknąć w VPN lub w inny sposób przesyłać w formie zaszyfrowanej. Jeżeli zawiedzie warstwa ochrony na poziomie WiFi, to dane chronione są kolejną warstwą. Takie rozwiązanie oczywiście komplikuje projekt, zmniejsza wydajność i zwiększa ryzyko błędów...
    W obecnych czasach rozwiązania chmurowe powodują, że część zasobów jest poza naszą kontrolą, ufamy, że firma trzecia wykonuje swoją pracę dobrze.

    Czy jest jakiś kompromis między kontrolą nad konstrukcją naszego rozwiązania, kosztami i czasem wykonania?

    Moje zdanie jest takie, że należy mieć świadomość istnienia różnych technologii, pozostawać na bieżąco z nowościami oraz dobierać rozwiązania do konkretnych warunków i wymagań.

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    And!
    Admin of Design group
    Offline 
    Has specialization in: elektronika cyfrowa, mikrokontrolery, transmisja i przetwarzanie danych
    And! wrote 8904 posts with rating 726, helped 174 times. Been with us since 2002 year.
  • #2
    kamyczek
    Level 38  
    Musimy się przyzwyczaić że wielu z nas wyraża się różnymi językami , używa różnych platform i dąży do tego samego celu różnymi środkami . Mnie przeraża bardziej przechwalanie się i opluwanie innych za to że robią coś inaczej . Jest wiele aspektów programowania i różne potrzeby twórców ,ale przede wszystkim powinniśmy szanować się wzajemnie . Ja odnoszę wrażenie że sama nazwa język wysokiego i niskiego poziomu zaczyna być utożsamiana z programistą który go używa . Tylko czy na pewno wysoki poziom języka oznacza to samo u programisty ? A Niski ,to że programista ma niski poziom . Używam języka niskiego poziomu ,bo sprawia mi to przyjemność i satysfakcję . Mam ograniczone zaufanie do bibliotek z sieci tym bardziej nie znając ich autorów i jakości kodu ,który stworzyli . Nie piszę projektów komercyjnych na czas i nie traktuję pisania jak sposobu zarabiania na życie . Języki wyższego poziomu stworzono z potrzeby szybszego tworzenia oprogramowania i tak już będzie . Trzeba jedynie zrozumieć że tworzyli je ludzie piszący w językach niskiego poziomu bo od tego programowanie się zaczęło i tego już nic nie zmieni . Ważne jest to , żeby się wzajemnie szanować bo łączy nas programowanie a to że mamy do niego różne podejście nie powinno nas dzielić i szeregować ...
  • #3
    And!
    Admin of Design group
    To racja, też nie rozumiem atakowania innych niż "nasze" rozwiązań (których często osoba nie używa lub niezbyt dobrze je zna).
    Innym problemem jest zbytnie przywiązanie się do określonej technologii, opanowanie jej do poziomu mistrzowskiego i niechęć nauki czegoś nowego i rozwoju. Czas biegnie, pojawiają się nowe rozwiązania, a takie osoby są "przyklejone" do jakiegoś rozwiązania bo "były na szkoleniu" albo "mają doświadczenie".
  • #5
    kamyczek
    Level 38  
    And! wrote:
    Innym problemem jest zbytnie przywiązanie się do określonej technologii, opanowanie jej do poziomu mistrzowskiego i niechęć nauki czegoś nowego i rozwoju. Czas biegnie, pojawiają się nowe rozwiązania, a takie osoby są "przyklejone" do jakiegoś rozwiązania bo "były na szkoleniu" albo "mają doświadczenie".


    Ktoś kiedyś napisał że lepsze jest wrogiem dobrego . Zmiany mają sens wyłącznie wtedy , gdy nie da się rozwiązać zagadnienia dobrze znanymi i sprawdzonymi metodami . Takie jest moje zdanie
  • #6
    And!
    Admin of Design group
    @Sam Sung wiesz zawsze warto posłuchać drugiej strony, może się okazać że to my się mylimy. Czy w sytuacji gdy zastosowanie jest określone to widzisz sens takiej mniej ogólnej dyskusji? Gdyż z jednej strony każdy robi jak mu wygodnie i ważne że działa, ale czasem opłaca się coś zoptymalizować.

    @kamyczek lepsze jest wrogiem dobrego, ale obecnie często jest tak że dobre rozwiązanie jest wymieniane w całości, gdyż zestarzało się na tyle że nie ma części/fachowców lub nowe rozwiązanie jest tańsze niż naprawa (chociaż pewnie krócej podziała).
  • #7
    kamyczek
    Level 38  
    Sprawa wygląda dla mnie tak: nauka innego języka ma sens tylko wtedy ,gdy nie da się jej zastąpić mikrokontrolerem ,który znam i napisać oprogramowania w języku który znam . Tak samo nie zmienię mikrokontrolera ,który znam i sprosta on zadaniu na inny dlatego że jest nowszy . Tego typu zabiegi wymagają ode mnie czasu na naukę języka , IDE , i samego mikrokontrolera . W tym samym czasie napiszę to ,co potrzebuję w języku który znam , na znany mi mikrokontroler . Poza tym jak nie zrobię tego na jednym układzie zaprzęgnę do roboty 2 lub 3 i dalej będzie to to samo . Różnimy się drogą ,którą dążymy do celu ,ale na swój sposób każdy z nas go osiągnie a o to przecież chodzi ,by osiągnąć zamierzony cel .
  • #8
    chudybyk
    Level 31  
    kamyczek wrote:
    Sprawa wygląda dla mnie tak: nauka innego języka ma sens tylko wtedy ,gdy nie da się jej zastąpić mikrokontrolerem ,który znam i napisać oprogramowania w języku który znam

    Takie podejście jest dobre dla hobbysty. Zajmując się tym zawodowo, należy zawsze optymalizować projekty od wielu stron - ekonomicznej, ergonomicznej, funkcjonalnej, itp. Wiąże się z tym wiedza o możliwych kierunkach rozwiązania problemu, w tym również o platformach programowych. Użycie metod "wyższego" poziomu zwykle daje przyrost w szybkości tworzenia programu, ale ta zaleta nie jest tak dobra jak inne - np. łatwość wprowadzania modyfikacji, łatwość konserwacji i debugowania, multiplatformowość, wielodostępność, rozproszona logika oraz funkcjonalność i inne. Nowych języków i platform nie tworzy się dlatego, że stare są złe, ale po to żeby na czymś zyskać. Wraz z ulepszeniami z jednej strony przychodzą również specyficzne wady i niedoskonałości, najlepiej więc znać możliwie duży przekrój rozwiązań, nawet jeśli w 90% wykorzystujemy ten jeden.
    Poza tym nowe rzeczy to zawsze "fun". Nie korci Was żeby spróbować jak Java pójdzie na Cortexie M0? ;-)
  • #9
    kamyczek
    Level 38  
    Właśnie to trzeba zrozumieć że każdy może skakać po rozwiązaniach , część z nas musi , ale część nie musi i nie chce . Trzeba się po prostu szanować i rozumieć że inaczej nie znaczy źle . Zobaczcie jak piszą niektórzy o tym co robią , ja robię najlepiej , reszta to idioci nie wiedzą nic i robią wszystko źle . My sobie koledzy nie pomagamy tylko się wzajemnie opluwamy , kpimy z siebie i tylko czasem ci którzy używają tej samej platformy dadzą dobre rady . Polskie fora ociekają z "hejterstwa" wszelkiej marki. Mnie nie przeraża że jest nas wielu i mamy inne podejście do tematu . Po prostu różne są aspekty tego co i jak robimy , jest jednak jedna zasada która powinna nam przyświecać . Powinniśmy się wzajemnie wspierać i sobie pomagać bo do tego są fora , a połowa jest tu po to żeby komuś dowalić i się z niego naśmiewać .
  • #10
    User removed account
    Level 1  
  • #11
    kamyczek
    Level 38  
    Masz wiele racji w tym co piszesz jest tylko jedno ale ja pracuje "solo" na własne potrzeby nie musze się przesiadać i poza tym mój ograniczony czas wolę spożytkować bardziej optymalnie . Pewnie w wolnym czasie i przypływie chęci posiedzę nad jakimiś newsami ,ale zauważ że ty ludzi chwalących się czymś nowym jest mało i chcących podać rękę komuś kto zaczyna . Tu łatwiej jest kogoś zniechęcić wyśmiać i opluć za poglądy i chęć bycia innym .
  • #12
    katakrowa
    Level 22  
    Generalnie temat bez sensu. Od lat na świecie w rolnictwie dostępne są motyki i kombajny a jednak mimo istnienia kombajnów wciąż możemy kupić w ogrodniczym nowiutką motykę.
  • #13
    VIGOR_PICTURES
    Level 20  
    katakrowa wrote:
    Generalnie temat bez sensu. Od lat na świecie w rolnictwie dostępne są motyki i kombajny a jednak mimo istnienia kombajnów wciąż możemy kupić w ogrodniczym nowiutką motykę.


    Zwykle odpowiadam ludziom piszącym takie rzeczy na serio, żeby spróbowali takim kombajnem zaorać swój ogródek warzywny w szklarni o powierzchni trzy na trzy metry ;)

    Nie nazwałbym siebie nawet początkującym w zakresie programowania w C/C++ ale jakoś póki co wolę próbować wszystko pisać samemu, własna klasa string, własna klasa wyświetlająca okienka w bibliotece SFML (do czystego OpenGL jeszcze nie dorosłem). Dlaczego? Wmówiłem sobie, że jak nauczę się teraz wszystkiego na niskim poziomie to nie będę miał później problemów z korzystaniem z gotowych bibliotek czy bardziej wysokopoziomowych języków. Za Assemblera się nie brałem za radą znajomego programisty.

    Brałem nawet ostatnio udział w wojnie języków :D. Dwóch programistów kłóciło się co jest lepsze C czy Java. W końcu zapytali mnie i moja odpowiedź ich nie pocieszyła bo stwierdziłem że po pierwsze nie znam się a po drugie niech sobie przygotują jakieś konkretne problemy i wtedy niech debatują.

    Przez chwilę był lament "Nooooooo jak to? Programujesz i nie znasz się? Przecież to się jedno z drugim wyklucza". Nic nie dawało tłumaczenie, że jest pewnie że 30 głównych języków programowania a ja mam jakieś obycie tylko w jednym - więc jakim prawem mam oceniać coś czego nie znam. Zawsze myślałem że programiści to ludzie oświeceni o szerokim spojrzeniu na świat, a tutaj takie klapki na oczach.

    Na koniec żartobliwe porównanie języków, mało co rozumiem, ale nie zazdroszczę PHPowcom ;)Niskopoziomowo vs wysokopoziomowo
  • #14
    atom1477
    Level 43  
    kamyczek wrote:
    Ktoś kiedyś napisał że lepsze jest wrogiem dobrego . Zmiany mają sens wyłącznie wtedy , gdy nie da się rozwiązać zagadnienia dobrze znanymi i sprawdzonymi metodami . Takie jest moje zdanie

    Moje jest takie jak mówi przysłowie które podałeś.
    Czyli:
    Zmiany mają sens nie tylko wtedy, gdy nie da się rozwiązać zagadnienia dobrze znanymi i sprawdzonymi metodami, lecz również wtedy gdy te dobre i sprawdzone rozwiązania są zbyt drogie w stosunku do innego nowego rozwiązania (wliczając w to koszt nauki tego nowego rozwiązania).
  • #15
    katakrowa
    Level 22  
    Generalnie nie wyobrażam sobie pisania stron internetowych w c++ a także kiepsko widzę programowanie sterowników w PHP. Do przechowywania większej ilości danych skorzystam z bazy danych SQL ale do zapisania konfiguracji użyję bezpośredniego zapisu w pamięci eeprom. Silnik 3D dla gry napiszę w c++ kluczowe procedury korygując assemblerem natomiast oprogramowanie księgowe w Java, Delphi albo C#.
    Oprogramowanie występuje dzisiaj już prawie wszędzie i odpowiada za sterowanie malutkimi i ogromnymi procesami. W każdej dziedzinie różne środowiska sprawdzają się inaczej i chyba nie ma w tym nic dziwnego. W poście powyżej jak zwykle oberwało się PHP'om a to język, który w wielu sytuacjach jest niezastąpiony i daje możliwości, których próżno szukać w c++ lub innych językach. Owszem jego składnia narzuca pewien brak optymalności z drugiej strony łatwość pracy na dynamicznych drzewiastych strukturach to bajka w porównaniu np. z c++.

    Także trzeba wiedzieć, że do rozwiązania jednych problemów warto sięgnąć po FPGA a innych po UML'a ...
    Porównań jak w temacie można dokonywać jedynie w kontekście wybranego zagadnienia - nigdy ogólnie.