Kariera a technologia - moja opinia

0

W ilu bankach pracowałeś? Czy może znasz to z opowiadań babci na dobranoc?

W jednym.

Na ilu stanowiskach starszego Javy / C# pracowałeś? Ile osób takich znasz które szczerze powiedzą Ci ile zarabiają? Czy to również opowiadania bajek na dobranoc?

Wielu moich znajomych (jeszcze z czasów studiów, z którymi mam dość dobry kontakt) jest na stanowisku starszego programisty .NET. Mamy podobne doświadczenie, a jednak zarabiają mniej. Poza tym możesz sprawdzić sobie w ogłoszeniach no i popytać znajomych. Szczególnie "górny limit" zarobków dla Javy jest znacznie większy od .NET.

0

Okiem laika w obu językach:

  • C# i Java są wykorzystywane w bankach (AFAIK C# między innymi w Millenium)
  • oba języki mają porównywalne stawki
  • dla hasła "C++ trading $140K+" jest na indeed.com najwięcej ofert (374)
  • oba języki mają otwarte platformy - C#: Mono, Java - OpenJDK, http://viva.sourceforge.net/runtime.html
  • Java jest starsza i przez to być może bardziej zacofana - tak przynajmniej wynika z trochę fanboyowskiego http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java
  • Java na pewno ma fundamentalny problem mentalny - niby obiektowa, ale do niektórych rzeczy ma specjalne wypustki: int vs Integer
  • nie do końca rozumiem hasło "Java jest COBOL-em XXI wieku" - chodzi o to że taka toporna czy że Enterprise-based, czy jedno i drugie?
  • dotychczas to właściciele (Sun, Oracle) Javy częściej ścigali/ignorowali OSS niż MS - patrz m.in. Android oraz historia Javy na Linux (tzn jej braku - http://en.wikipedia.org/wiki/Blackdown_Java )
  • Java jest obecnie bardziej popularna (liczba platform, projektów, ofert pracy) i dostępna niż C#
  • MS zabijał już swoje kury które niosły jeszcze jaja - zrobił to nawet całkiem niedawno (początkowe VS 2012 Express miało nie mieć C++, VB jest w odstawce na rzecz C#)

Niestety wychodzi z tego miks z którego trudno coś wywróżyć.

0

Z tego linku wynika że C# jest lepszym następcą C++ niż Java:
http://www.veridicus.com/tummy/programming/java_vs_csharp.asp

Bo?
Umożliwia łatwiejsze dostanie się do natywnego kodu, w związku z czym zawsze można go rozszerzyć o C/C++.

Tutaj inne porównanie napisane przez programistę Javy (2007):
http://www.25hoursaday.com/CsharpVsJava.html

  • polecam sekcję "Now For Something Completely Different"

A tu jeszcze inne:
http://www.slideshare.net/jeffz/why-java-sucks-and-c-rocks-final

  • z tego wynika że Java jako język jest do tyłu i żeby mieć możliwości podobne do C# trzeba na JVM raczej użyć Scali...
0

Porównania z czasów Javy 1.4 to naprawdę na czasie porównania :/
W Javie 8 będą lambdy i Virtual Extension Methods (wcześniej znane jako Defender Methods): http://www.javabeat.net/2012/05/virtual-extension-methods-in-java-8/ - różnica w ekspresywności między Javą i C# jeszcze bardziej się zmniejszy.
Zarówno język Java jak i C# się moim zdaniem nie zbliżą do Scali, gdyż Scala jest zbyt skomplikowana jak na masówkę. No ale przecież jest multum języków, na samą platformę Java są takie języki jak (oprócz wspomnianej Scali) Groovy, JRuby, Clojure, itd Ostatnio platforma Java staje się bardziej przyjazna dla języków kaczo typowanych za sprawą invokedynamic. Kolejne usprawnienia w drodze za sprawą MLVM.

A natywny kod? Ja właśnie teraz wykorzystuję natywny kod w DLL na Windowsie poprzez JNA (https://github.com/twall/jna) i jest to dość proste.

PS:
Powstaje jeszcze język Kotlin od JetBrains: statycznie typowany, łatwiejszy od Scali, bardziej zwięzły od Javy, latający na JVM.

2

W Javie 8 będą lambdy i Virtual Extension Methods (wcześniej znane jako Defender Methods): http://www.javabeat.net/2012/05/virtual-extension-methods-in-java-8/ - różnica w ekspresywności między Javą i C# jeszcze bardziej się zmniejszy.

W C# 5, czyli na ponad rok przed wydaniem Javy 8 będzie async i różnica w ekspresywności między Javą i C# jeszcze bardziej się powiększy.

Istnieje w Javie jakaś biblioteka, która w tak prosty sposób dałaby możliwość generowania bytecode'u w runtime jak expression trees w C#? Na przykład, żeby móc zaimplementować kompilator wyrażeń ONP?
http://msdn.microsoft.com/en-us/library/bb397951.aspx

1
Rev napisał(a):

Istnieje w Javie jakaś biblioteka, która w tak prosty sposób dałaby możliwość generowania bytecode'u w runtime jak expression trees w C#? Na przykład, żeby móc zaimplementować kompilator wyrażeń ONP?
http://msdn.microsoft.com/en-us/library/bb397951.aspx

http://www.h-online.com/security/features/The-new-Java-0day-examined-1677789.html - chyba istnieje [rotfl]

0

Co to jest ten async dokładnie? new Thread().run()?

Co się da zrobić za pomocą tych expression trees? Da się np zdekompilować bajtkod do expression tree? Albo czy kompilator może przetłumaczyć zwykły kod na expression tree?

0

W expression trees chodzi o to, żeby stworzyć je programistycznie, dołączając kolejne gałęzie.

Do stworzenia AST z bytecode'u można użyć Mono.Cecil, a ze zwykłego kodu C#/VB.NET (kompilacja albo tylko analiza leksykalna) Roslyn (http://msdn.microsoft.com/en-gb/roslyn). Do stworzenia własnego dynamicznego języka można użyć DLR (http://dlr.codeplex.com/).

0
Wibowit napisał(a):

Co się da zrobić za pomocą tych expression trees? Da się np zdekompilować bajtkod do expression tree? Albo czy kompilator może przetłumaczyć zwykły kod na expression tree?

Z tego co przeczytałem budujesz w czasie runtime wyrażenie przy pomocy odpowiednich funkcji które potem możesz użyć jako delegata - od razu lub skompilować.
Czyli np. zamienić wyrażenie regularne na program - w czasie runtime.

Mocna rzecz.

1

Czyli expression trees to jest coś co można zaklepać w czystym C#/ Javie? Jeśli tak to jeśli było na to zapotrzebowanie to pewnie jest jakaś libka do tego.
W Javie jest API dla dynamicznych języków: http://jcp.org/en/jsr/detail?id=223 (ale da się to nagiąć np do Scali z tego co czytałem). W Groovym jest zabawa AST: http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations . Jest ANTLR, itp itd

Gdyby można było wziąć oryginalne AST ze skompilowanego kodu, pomielić go i skompilować od nowa to byłby niezły bajer, a tak to tylko mała ciekawostka.

1

Różnie to bywa. Ja uparcie uczę się Javy i C#. Nastawiałem się na pisanie aplikacji w C# w pracy, nawet jedna już jest napisana i działa a tu... nagle przyszło mi pracować w w Clipperze i CA Visual Objects.... Przez jakiś czas trzeba utrzymywać stare systemy i je "konserwować". Jak długo? Nie wiadomo....

2

Jak Ci źle to zmień pracę.
Ja teraz zmieniam z kilku powodów i negocjuję właśnie z kilkoma firmami. Prosta piłka - Jest mi źle, chciałbym coś zmienić itd = zmieniam pracę na lepszą.

1

Nie mówię, że źle, tylko chodzi o to, że czasem oprócz "popularnych i na topie" technologii trzeba się na jakiś czas cofnąć w czasie :) :) :)

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