przejście z embedded do "dużych komputerów"

0

Trochę czasu ociągałem się z napisaniem tego posta, bo wypadałoby radzić sobie samemu, ale mnogość możliwości powoduje u mnie lekkie zagubienie. Ad rem:
z wykształcenia jestem elektronikiem, piszę głównie w C (oraz trochę w asm, a ostatnio wdrażam się w C++) na relatywnie małe mikrokontrolery (głównie Cortexy, trochę na AVR i MSP430). Do tego dochodzą język opisu sprzętu (VHDL, Verilog). Jeśli byłoby to ważne - głównie zajmuję się radiomodułami i DSP, przy czym nie piszę kodu "produkcyjnego", a raczej tworzę wewnętrzne narzędzia, od strony tak hard- jak i software'u (pracuję w kontroli jakości, jeżeli ma to jakiekolwiek znaczenie).

Na PCty jak dotąd nic dużego nie pisałem, trafiał się co najwyżej mały soft do odbioru danych po RS232 i ich "mielenia": tutaj w ruch szedł Python (głównie do offline'owego DSP, dość często) albo C++ (rzadziej). I teraz pytanie - w co iść dalej i jak przerzucić się efektywnie na "większe maszyny"?

Zaraz pewnie pojawi się pytanie "a po co ci to?". Odpowiedź jest prozaiczna - bo ułatwię sobie życie i zamiast uruchamiać skrypty z konsoli, zwyczajnie wyklikam sobie takie czy inne zapytania do bazy czy zautomatyzuję pewne procesy testowe w sposób przyjazny dla użytkownika i tym samym zdejmę sobie z pleców część obowiązków. Dodatkowo chodzi mi po głowie kilka projektów (embeddowych), w których zwyczajnie przydałby się ładny, graficzny konfigurator ;)

Docelowo - chciałbym się pewnie przekwalifikować. Pytanie - w którym kierunku iść?
Najbardziej chyba byłoby mi po drodze z C++ bo zwyczajnie mam tutaj dość solidne podstawy w postaci C i przesiadka byłaby relatywnie bezbolesna. Python kusi bardzo dobrym "obibliotekowaniem" ale nie jestem przekonany w 100% czy to dobry kierunek, zwłaszcza że webdev niezbyt mnie interesuje, a chyba głównie tam jest on stosowany? Natomiast w mojej obecnej pracy króluje C#, zresztą patrząc po ofertach jest to dość modny język.

Zresztą sam język jest sprawą wtórną, bardziej chodzi mi o "przestawienie się" na programowanie wyższego poziomu: jakieś porady? Póki co mam na tapecie powtórkę z Grębosza+wzorce projektowe, jakieś dobre rady co dalej (poza: kodzić, kodzić, kodzić)?

Pozdrawiam

1

Nie wiem czy dla twoich potrzeb (prosta automatyzacja, konfiguratory itp.) najlepszy będzie C++ - jest to język oczywiście wysokiego poziomu, ale w zastosowaniach szybkiego tworzenia aplikacji odchodzi się od niego na rzecz Javy/C#. Zwłaszcza w szeroko rozumianej biznesowej dziedzinie - C++ nie jest już popularnym językiem biznesowym. Python jest świetny jako język skryptowy, w sam raz do tworzenia wewnętrznych narzędzi. Nie wiem jak wygląda Python w sferze biznesowej, ale raczej ja go widzę jako język wewnętrzny, naukowy, dydaktyczny i oczywiście webowy.

Na wyższy poziom - kodzić ;-)
Poza tym rzeczywiście - obiektowość i wzorce projektowe mogą być przydatne, bo ich obecnie raczej nie stosujesz.

Z ciekawości - dlaczego chcesz przejść z niszy do sfery ogólnej?

Natomiast w mojej obecnej pracy króluje C#

W sferze embedded króluje C#? Ale to chyba nie na samym poziomie mikrokontrolera ;-)

0

Będę odpowiadać od końca, mam nadzieję, że to nie problem:

Z tym C# to źle się wyraziłem - embeddowcy oczywiście piszą w C, natomiast urządzenia współpracują ze sporym systemem napisanym właśnie w C#.

Powód chęci przebranżowienia się w sumie prozaiczny: chciałbym się rozwijać zawodowo, a jako elektronik nie mam obecnie takiej możliwości - to co robię teraz jest niestety w dużej mierze uwsteczniające (bo aż tylu narzędzi nie tworzę. Przede wszystkim testuję urządzenia funkcjonalnie, do czego de facto wystarczyłby facet po zawodówce). A że jestem jeszcze w miarę świeżo po studiach (w sumie to na, bo walczę jeszcze z doktoratem) i nie mam na głowie żony, dzieci i kredytu to zwyczajnie chcę wykorzystać czas jaki mi został na dokształcenie się. Szczerze mówiąc nie za bardzo chcę rozwijać temat obecnej pracy, w razie czego proszę pytać.
W miarę możliwości staram się jeszcze robić tu i ówdzie tzw. fuchy, żeby nie wyjść z wprawy, ale wiadomo, to nie to samo co projektowanie produktu, który ma iść w tysiącach sztuk do klienta.

Co do wzorców i obiektowości to powiem tak: pisząc kod embeddowy staram się zawsze jakoś mądrze wszystko podzielić na zamknięte moduły, oczywiście w czystym C nie wszystko można pięknie zrobić, ale myślę, że w miarę mi to idzie. Natomiast ze wzorcami faktycznie do czynienia nie miałem, może poza automatem skończonym.

A C# i Javy nie lubię, bo to ogromne i wolne kobyły (przynajmniej z moich obserwacji jako użytkownika napisanego w nich softu), a ja kocham szybko wykonujący się kod. Ale mam świadomość, że to języki zwyczajnie popularne, także może się przełamię. Zresztą, jak pisałem: nie jest problemem opanować składnię (chyba, że Brainfucka ;) ), bardziej przerzucić się na nieco inny sposób pisania.

Pozdrawiam

0

@Ktos jest biblioteka w C# do programowania elektroniki.
@alagner ja bym w C# szedł, bo lepszy od Javy moim zdaniem. W C# napiszesz to samo co w Javie, ale szybciej i lepiej(opinia prowadzącego :P) Zawsze możesz się 'męczyć' w C++.
BTW. Jaki temat pracy, pytam z ciekawości?

0

O .net micro wiem, ale ani to popularne, ani wydajne, to chyba bardziej ciekawostka aniżeli poważne narzędzie (przynajmniej póki co). U nas na pewno tego nie stosują.

Co do pktu 2giego: z C++ biję się teraz na Cortexach i - o dziwo - AVRach i po wgryzieniu się ta obiektowość zaczyna w embedded mieć ręce i nogi, trzeba po prostu uważać, coby nie przedobrzyć ;) Stąd też był mój pomysł użycia tego języka na PCtach. Zwłaszcza, że mógłbym wtedy pisać relatywnie przenośny kod (Win/Linux)

A co do tematu pracy - czujnik gazu oparty na zjawisku fotonapięcia powierzchniowego - takie pogranicze pomiędzy elektroniką a fizyką i chemią.

0

Ja jestem zachwycony NETMF (ale mówię z punktu widzenia gościa od C# i wysokiego poziomu) :P Aczkolwiek nie mam zamiaru twierdzić, że jest to poważne narzędzie w "biznesie" embedded, raczej coś dla amatorów albo do szybkiego prototypowania.

Możesz spojrzeć na C++ w połączeniu np. z frameworkiem Qt do tworzenia interfejsów graficznych - fajne narzędzie i nieźle się pisze. Plus daje kod przenośny Windows/Linux.

0

Ewolucja
Płynne przejście zapewni Ci C++ i Qt (okienka).
Qt można stosować z Pythonem. (PySide)
W C++ możesz tworzyć: moduły Pythona, aplikacje GUI, serwisy/demony, programy konsolowe i oczywiście oprogramować mniejsze maszyny.

Rewolucja
W C# - skoro stosowany w firmie - możesz tworzyć oprogramowanie klienckie ("mielące").
Może nie będzie najszybsze w uruchomieniu czy działaniu, ale prawdopodobnie szybsze w implementacji (od C++).
Java to raczej ten sam poziom w Twoim przypadku - też oderwane od tego co używasz aktualnie.

0

Dzięki Panowie, myślę że pójdę w kierunku ewolucyjnym, zwłaszcza że pojawił mi się na horyzoncie projekt sprzętowo-programowy, gdzie większa appka w Pythonie bądź C++ byłaby chyba najlepszym rozwiązaniem.

Pozdrawiam

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