poniedziałek, 24 czerwca 2013

Pułapka przypisania wartości / Assigment trap

Krótko i konkretnie, jako, że nie każdy mógł o tym wiedzieć.

Pierwsze pytanie, to jaką wartość dla x uzyskamy takim kodem?

byte x;
byte a=1;
byte b=2;
x=a=b;

Pomyśl nad prawidłową odpowiedzią chwilę...

Prawidłowa odpowiedź to 2
Mało tego, od powyższej instrukcji każda zmienna wynosi 2

Uzasadnienie jest proste, takie operacje przypisania wykonywane są od prawej do lewej strony, więc:
a=b;
x=a;

Jak to NIE działa
x=1=2;
Kompilator od razy powiadomi nas, o błędnym przypisaniu.
1 != 2

Trzeba sobie uświadomić, że w taki sposób można wartościować tylko zmienne i indexery, a samo 1 i 2 można potraktować jako const (1 to 1 a 2 to 2), tak samo z
bool b;
b=false=true;


To chyba koniec dobranocki, i uważajcie na takie proste błędy.
Diabeł tkwi w szczegółach

wtorek, 4 czerwca 2013

Regexp

Regexp to potężna zabawka, tzw. regularne wyrażenia (regular expressions) pomagają nam dostosować wyszukiwane wartości w tekście bez najmniejszego problemu

Z braku czasu w tym momencie mogę zamieścić tylko link do bardzo fajnej strony do nauki
http://regexone.com/
i
http://regexp.pl/

Jeśli ktoś nie wie o czym mówię, to w aktualnym stanie mogę jedynie polecić wpisanie w google:
"regexp, programowanie", albo "regexp, programming"

Regexp nie jest feature'm C#, występuje on w wielu wielu innych językach (zarówno z rodziny UNIX)

poniedziałek, 13 maja 2013

Sesja...

A wraz z nią nauka C i wątków pod Linuksa na przykładach ze średniowiecza
Z wykładów ciężko o konkrety, więc trzeba było pogoglować:
https://computing.llnl.gov/tutorials/pthreads/
To tak offtopem od C#

Czy tylko u mnie na uczelni większość profesorów zatrzymało się w czasie znając tylko 1 język, a o innych definicję z wiki? :)

sobota, 11 maja 2013

C# a Linux

Programiści pracujący na Linuxie zapewne wiedzą, że jest możliwość pisania programów w C#, lecz jeżeli ktoś będzie mieć zamiar kiedyś się pobawić linuksem bez pozbawiania się możliwości programowania w swoim ulubionym języku, to mogę polecić dwa IDE:

  1. Qt creator
  2. Monodevelop
  3. Codeblocks

Nie mam zbytniej ochoty na opisywanie wszystkiego w ilości większej, niż jedno / dwa zdania.

Qt creator - miły design, dobry debugger, Ci co programują w nim więcej mogli by powiedzieć ode mnie, bo ja korzystałem z

Monodevelop - można śmiało nazwać go portem Visual Studio, oczywiście nie jest tak obszerny, ale widząc go pierwszy raz na pewno nie będziemy się zbyt martwić o chaos. Polecam dla tych, którzy spędzili trochę czasu w VS

Codeblocks - typowe, mało ważące IDE. Chyba najlepsze w kwestii rozmiar / jakość

Nie orientowałem się w kwestii C# na Qt & CB, ale MD na 100% obsługuje C#

Monodevelop
  • Multi-platform
    Supports Linux, Windows and Mac OS X.
  • Advanced Text Editing
    Code completion support for C# 4, code templates, code folding.
  • Configurable workbench
    Fully customizable window layouts, user defined key bindings, external tools
  • Multiple language support
    C#, Visual Basic.Net, C/C++, Vala
  • Integrated Debugger
    For debugging Mono and native applications
  • GTK# Visual Designer
    Easily build GTK# applications
  • ASP.NET
    Create web projects with full code completion support and test on XSP, the Mono web server.
  • Other tools
    Source control, makefile integration, unit testing, packaging and deployment, localization

Tak wiem, brzmi jak bym faworyzował to IDE, ale po prostu jest dość przyjazne, i wspiera C# na systemie Linux

To tyle

niedziela, 5 maja 2013

Programowanie nie takie straszne...

Osoby zaczynające swą przygodę z programowaniem często dość szybko zostają zdemotywowani.
Kilka powodów, które uważam za istotne (z całym szacunkiem dla czytelników):

  • Grozi mi pała z przedmiotu, muszę się pouczyć bo nie dostanę na szlugi :\
  • Napisałem super elo mega Hello World, w takim tempie już jutro będę pisał Fifę 2141240!!!
  • Klasy, zmienne, stringi łingi, nie widzę nic konkretnego... na tym napiszę najwyżej kalkulator a i tak ten z windowsa lepszy...
  • Konsola konsola konsola, całe życie z tą durną konsolą?
  • Nie chce mi się...
  • Nie ogarniam...

Itp. itd.

 Niech to będzie motywujący wpis dla tych, którzy mają chęć rzucić programowanie w kąt

Zobaczmy, jak można napisać coś bardzo użytecznego, i jednocześnie prostego
ps. duża ilość kodu nie oznacza, że jest on skomplikowany

Klient FTP:
http://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Class

Przeglądarka WWW napisana w max 7 minut:


Odtwarzacz muzyki napisany w 5 minut


Konwerter muzyczny MP3 -> WAV ~~ 6 minut

Czemu to wszystko trwa tak krótko, i czemu (mam nadzieję) nie wydaje się koszmarem nocnym?
Ponieważ C# zawiera masę bibliotek, oraz (w porównaniu do przykładowo C++, chociaż to specyficzne porównanie, i proszące się czasami o hejt) jest dużo prostszym językiem.

Oczywiście są to aplikacje napisane w podstawowych wersjach, jeżeli będziecie uparci, to stworzycie coś ponad to. Nie ma osób specjalizujących się w każdej z tych dziedzin, dla jednej obsługa protokołów sieciowych będzie trywialne, dla innych magią (tak samo z plikami muzycznymi etc.)

Jak ktoś jest od wszystkiego, to jest do niczego

Dla tego polecam wgłębianie się w kierunku, który sobie wybierzecie, i w którym będziecie czuć się coraz pewniej. Na wszystko jest recepta, wystarczy cierpliwość, wujek google, i przede wszystkim dobry pomysł a czas zrobi swoje

Ikony obiektów

Pisząc program w C# (dokładniej będzie tu mowa o wyglądzie Visual Studio) często korzystacie z sugestii jakie oferuje wam intellisense czyli po prostu podpowiadanie użytkownikowi, jakie metody etc. może wywołac z danego obiektu.

Niektórzy pewnie wiedzą co oznaczają załączone ikony w sugestiach, anyway:


Oczywiście to nie są jedyne ikony, jakie występują w Visual Studio, lecz jedne z najważniejszych. Po więcej odsyłam do:

Class View and Object Browser Icons

 Szczególnie do Signal Icons

 

Klasy

Ostatnio zostały opisane struktury, więc teraz pora na klasy
Zobaczmy przykładowy kod Zostały utworzone dwa obiekty:

- Struktura kwadrat

- Klasa kwadrat

One w działaniu nie różnią się niemal niczym, oprócz tzw. "konstruktora" (ang. constructor)

Różnica jest trywialna - niektóre zmienne można podawać już na etapie tworzenia obiektu
Niektórzy mogą pomyśleć, czy to jest takie użyteczne. Odpowiedź jest bardzo prosta - tak, z kilku powodów:

- Przeglądając w sieci dokumentacje niektórych funkcji (tu kłania się strona MSDN, postaram się zrobić o tym jakiś wpis) dowiecie się, że klasy są niemal wszędzie
- Oszczędność linijek w kodzie, można zyskać na estetyce kodu (chociaż są wyjątki)
- Jeżeli czytacie to dla siebie z chęci programowania, a nie z obowiązku zaliczenia semestru, to sami się z biegiem czasu przekonacie czemu konstruktor jest użyteczny

Klasa w porównaniu do struktury wyróżnia się owymi najważniejszymi faktami
Struct Class
Dziedziczenie NIE TAK
Konstruktor NIE TAK
*Kwantyfikatory dostępu TAK TAK
*NULL reference NIE TAK
Interfejsy TAK TAK
Kopiowanie klas i struktur
Może najprościej zamieszczę kod i rezulat

W skrócie: w przeciwieństwie do struktur, zmiana wartości jednej z kopiowanej klasy ma wpływ na jej pozostałe kopie
Dziedziczenie klas:
Dziedziczenie klas, to najprościej ujmując ich nakładanie się.
Kod przykładowy:

wtorek, 26 lutego 2013

Struktury

Poprzednio został poruszony temat tablic, teraz przejdziemy do czegoś, z czego słynie programowanie obiektowe - struktury i klasy (ok, struktury, klasy potem opisze)

 Czym jest struktura?

Struktura jest swego rodzaju kontenerem na dane, mieści w sobie różne typy danych (w przeciwieństwie do tablicy), oraz wyróżnia się sposobem dostępu.

zobaczmy przykładowy kod
 (nie zwracajcie uwagi na słowo "public", struktury to rozgrzewka przed klasami, i tam się tym zajmę dokładniej)

 To jest przykładowa struktura,a teraz spróbujmy coś z nią zrobić

Rezultat ostateczny:
Tak wiem, akurat poruszona kwestia uprawnień jest trochę bez sensu, ale chodzi o przedstawienie struktur

Dwie rzeczy cechujące dodatkowo struktury w C#:
  • Mogą posiadać konstruktor
  • Mogą dziedziczyć interfejsy (ale nie same siebie! struktura nie może dziedziczyć z innej struktury)
  • Pola struktury nie mogą być inicjowane (tj. np. "new int[5]"), jeżeli nie są typu const, lub static
  • Struktura nie może posiadać domyślnego, bezparametrowego konstruktora
Konstruktory opiszę również w klasach, a dziedziczenie raczej jako część drugą klas :)

Tablice

Tablice to najprostsze kontenery danych, dostajemy się do nich przez podanie indeksu elementu
Istota tablic:

Oto jak je deklarujemy (przykład z int):
oto jak możemy je wypełnić:
 podczas deklaracji: po zadeklarowaniu: oraz jak się do nich odnosimy:
etc.

Ok, a może ktoś chce zapytać po co są te tablice? Po co wgl. przejmować się takim zapisem dla danych?

Wyobraźmy sobie aplikacje, która symuluje elektroniczny dziennik klasy (gimnazjum czy coś...) Teraz zobaczcie ten kod i zobaczcie, że jest on dużo bardziej funkcjonalny.

Plusy:
  • możemy zapytać użytkownika, i udzielić mu prawidłowej odpowiedzi
  • możemy przeszukiwać w pętlach daną wartość (to później)

Minusy:
  • tablice muszą mieć ściśle określoną ilość elementów
  • indeks tablicy nie zawsze mówi nam, jakiej wartości możemy się pod nią spodziewać
  • tablice przechowują dane jednego, i tego samego zadeklarowanego dla niej typu
A co z innymi rodzajami tablic? Co z tablicami 2D 3D 4D ...
Do tej pory opisywałem najtrywialniejsze z możliwych tablic - jednowymiarowe, jednak tematem koniecznym jest zapoznanie się z tablicą dwuwymiarową


Czym to się w zasadzie różni? Jedynie sposobem deklaracji i odwołania się do tablicy. To jak je wykorzystamy zależy od nas, czy będzie to tablica 3x3 do gry w kółko i krzyżyk, czy może będziemy pisać algorytm do rozmieszczenia statków (to chyba tablica 9x9? ;) )


Pominę tematykę Jagged Arrays (tablicy tablic / tablic zagnieżdżonych), ponieważ osobiście preferuję posługiwanie się listami, jeżeli jednak ktoś będzie nalegał to i o tym zrobię artykuł
Ciekawostka na koniec:
  • Wymiary tablic to sztuczne wyrażenie wytworzone na potrzebę ich obrazowania, tak naprawdę tablica w pamięci jest ulokowana ciągiem, przykład z debugger'a (początkujący nie muszą tego rozumieć, mogą jednak rzucić okiem na wynik w górnym oknie ignorując kod, górne okno przedstawia reprezentacje tablicy w pamięci PC).


środa, 20 lutego 2013

Betony programistyczne

SPOILER: Chyba najbardziej nerdowski wpis ;)

Trzeba czasem odpocząć od odgrzewania tego samego kotleta, chwila dla programistycznych demotów

Wstępnie:

Jak to wchodząc na facebook'a możecie zobaczyć tone nowych obrazków z pier...liarda coraz to demotywatoro-podobnych stron tak i w programowaniu znajdą się podobne źródła, np. codecrap czy jakiś profil w stylu tego profilu

Kilka perełek, które znalazłem (oczywiście to nie tylko C#)



Mój faworyt, zapewne od zwolnionego programisty, który w projekcie zostawił niespodzianke :D




CSS ;)

Do tego coś czego mi sie nie chce wklejać:
"return 42;"

Jak ktoś nie rozumie ocb. z liczbą 42 -> wikipedia :)








wtorek, 19 lutego 2013

Kontenery

Nie, nie chodzi o kontenery na śmieci (chociaż jeżeli programista napisze program używając ich zbyt wiele to w sumie i takie sie trafią).

Kontenery danych są wymaganym do omówienia elementem, bowiem istota programowania polega nie tyle, co na zwykłych zmiennych, ale także na umiejętnym używaniu ich zbiorów

Typy kontenerów:
  • tablice
  • listy
  • struktury
  • klasy
  • unie
etc.

Typów jest bardzo dużo, Ja omówię tylko te najważniejsze

W kolejnych wpisach (w kolejności): tablice -> struktury -> klasy -> listy

Ciekawostka: W C# nie występują wektory, zamiast nich stosujemy listy

niedziela, 17 lutego 2013

Parsowanie tekstu

Parsowanie / Parsing / Parser - kwestia "wydłubywania" informacji z kodu, np. wyciąganie z kodu HTML informacji o autorze strony.

Za pomocą masowych operacji na stringach można takie informacje wyciągać budując dość ciekawe programy, jeżeli wiecie czym jest program do kanałów RSS - to jest właśnie taki parser wiadomości.

Stworzyłem ten wpis ponieważ jest on małym subwpisem dla zmiennych String, chciałem nieco to zobrazować :)
Na wyjściu mamy:
17 : 02 : 1991

Oczywiście jeżeli ktoś uważniej czytał poprzedni temat o Stringach i ruszył głową:

To tak o parsowaniu w pigułce :)

Zmienne #3: Typ Float - zmiennoprzecinkowe liczby

Dobra powrót po sesji (a później opijaniu i lenistwie - też jestem człowiekiem ^^) Każdy kto słyszał o problemach z porównywaniem liczb zmiennoprzecinkowych zapewne czuje nieco temat.

Pierwsze, na co trzeba zwrócić uwage - nie wszystkie liczby zmiennoprzecinkowe mogą zostać idealnie odzwierciedlone przez komputer w postaci binarnej, tak więc możemy spodziewać się bugów.

Proof:
Ile a powinno wynosić? A no nie więcej niż 0.06, a jednak debugger pokazuje 0.0600000024. BEEEEEEEP! Właśnie delikatnie popsułem Ci humor, w końcu mogło by to byś bardziej bajeczne no nie? :)
Sprawdźmy inny przykład: asum = 0.9999907

Oczywiście nie zawsze tak jest, sporo zależy od kompilera z jakiego korzystamy, aczkolwiek założenie, że każdy błąd naprawi za nas jest niepoprawne, i 100% w tym przypadku błędne!!!

Jak z tym walczyć? Co się tak na prawdę dzieje?
Typ float traci panowanie nad sobą, gdy przekraczana jest wartość jej precyzji, następują wtedy zaokrąglenia (które czasem nie mają sensu)

I tak sobie myślę: utnijmy ten szalejowy koniec

Co prawda jest to mało estetyczna metoda, ale: Nareszcie zwraca normalny wynik, czyli 1.0 ;)

Nie uważam tej metody za dobrą, nie wiem czemu (może wygląda zbyt banalnie?), aczkolwiek póki działa nie będę rozpaczał :)

Zmienne #2: Typ String - łańcuch znaków

Odnośnie stringów nie będzie tu filozofi, mam zamiar pokazać podstawowe kody, które pomagają na nich operować. Temat jest dość zbędny, przyda się go przeczytać dopiero wtedy kiedy programista zostanie zmuszony do skorzystania z nich :)

Jeżeli ilość kodu wydaje się wam spora, jeżeli wpis nieciekawy, nie ma problemu - możecie przejść do kolejnego, bo tak jak napisałem - detale poniżej są wymagane raz na jakiś czas

Kopiowanie string'ów do tablicy char'ów (string to char[]) = CopyTo
Sprawdzanie czy dany string kończy się daną literą / ciągiem znaków - EndsWith Identycznie działa metoda StartsWith
Porównywanie stringów - Equals Nie muszą to być oczywiście cyfry w łańcuchu
Enumeracja char'ów
Wyciąganie indeksu elementu. indexOf
DieKitty - metoda Insert
Ostatnie wystąpienie - LastIndexOf
Długość string - Length
Zamiana znaków - Replace
Rozdzielanie łańcucha - Split
Wyszukiwanie tekstu w tekście - Substring
Rozdzielenie do tablicy charów - ToCharArray
Usuwanie prowadzących białych miejsc - Trim Chodzi o usunięcie spacji po lewo i po prawo ;) Podając wartość dla Trim można usunąć inne wartośći.
Mniej istotne:
- ToUpper, wszystkie litery z dużej
- ToLower, wszystkie litery z małej
- TrimStart / TrimEnd, patrz opis Trim

niedziela, 3 lutego 2013

Zmienne #1: Typ całkowity

W zasadzie cała magia typów całkowitych opiera się na określeniu ich rozmiaru, wiadomo, że można wszędzie pisać int, i program będzie działać, ale architektura systemów pozwala nam się wykazać tu ponad to czego uczą w pierwszym lepszym technikum

PRIMO!

Ta tabela zawiera wszystkie typy całkowite, oraz ich zasięg
Note: przedrostek 's' oznacza, że zmienna może przyjąć wartości poniżej zera, redukując jej zasięg wartości "na plusie"

Dla czego jest to istotne? Załóżmy, że tworzysz program, taki jak, np. Excel, albo coś związanego z położeniem geograficznym, a wtedy musisz wiedzieć jaki typ zmiennej dopasować dla danej funkcji (w klasach właściwie mówi się na to "metoda")


To nie wszystko, bo można dodatkowo operować na strukturach dotyczących typu całkowitego, np.

Int64 jest strukturą przechowującą liczbe, nie prostym typem!
Co prawda nie istnieje Long64, ponieważ jako typ liczbnowy w C# long jest typem o największej pojemności

Zmienne

Programowanie bez zmiennych, jest jak matematyka bez znaku równości

Wyróżniamy 3 typy zmiennych:

Typy proste
Typy złożone
Typy wskaźnikowe
- Dotyczą niemal wszystkiego, ale wskaźniki zostawimy na potem

Kolejne kilka tematów poświęcę omówieniu każdego z typów zmiennych, zrobię to dokładnie i szybko, ponieważ zmienne są dość istotne, ale nie warto poświęcać 12 godzin na ich zrozumienie, jeżeli kolejne wpisy nie będą tego wymagać

sobota, 2 lutego 2013

Hello World

Nie wiem, czy to prawidłowa decyzja, ale postaram się prowadzić blog tak jak kogoś za rękę urozmaicając go o jakieś specyficzne rzeczy podczas rozwoju (używanie klasy http etc.)

Na razie podstawy :)


piątek, 1 lutego 2013

ASP.NET vs PHP

Tak więc wracam do bloga z kolejnym wpisem, który zapowiedziałem poprzednio.
Tym razem dotyczy ASP.NET i PHP

Postarałem się dokonać dokładnej analizy każdego języka pod względem jego funkcjonalności, nie będąc jednocześnie stronniczym, aczkolwiek z naporem na obalenie mitu o równości tych języków.

 ASP.NET
- Bazowany na C# / Visual Basic
- Język kompilowany
- .NET, MVC, Entity, Web Pages, Web Forms Framework + Razor engine
- Platforma: Windows Server / Linux
- Wielkość projektu nie wpływa znacznie na czytelność kodu, np. DotNetNuke CMS
- Open Source
- Data wydania: 2002
- Stale rozwijana
- Przyciąga uwagę w CV
- Dla korporacji (50-50)
- System plików NTFS / Linux (MonoDevelop)


PHP
- Składnią najbliżej C++
- Język interpretowany
- Lista frameworków
- Platforma: Linux / Windows Server
- Im większy projekt tym mniej czytelny kod, np. PHPBB3 czy Joomla! CMS
- Open Source (link)
- Data wydania: 1995
- Standard niemal każdego CV WebDev'a
- W celach ogólnych
- System plików Unix / Windows

Paradygmaty ASP.NET i PHP

ASP.NET:

PHP:
Frameworki:
ASP.NET posiada chyba wszystkie wymagane framework'i (nie jestem WebDev'em więc mi wystarczają), natomiast PHP dla usprawnienia działania wymaga dodatkowych framework'ów.
 Nie zapominajmy, że PHP to język opensource'owy - nie tutaj wsparcia ze strony twórców, a jedynie od źródel z sieci. W PHP wspiera się społeczność

Platformy:
Odnośnie pracy na poszczególnych platformach trzeba rozważyć na jakiej maszynie został skonfigurowany serwer. Dobrze jest, gdy serwer unika obciążenia spowodowanego nakładką graficzną (dostęp do takiego serwera można uzyskać za pomocą Shella). Z racji na możliwość kompilacji własnego jądra dla systemów z rodziny UNIX wydajniejszym wyjściem wydaje się zastosowanie systemu Linux, lecz sam system nie jest decydującym w porównaniu ASP.NET z PHP - nawet najlepiej skonfigurowany system nie uczyni danego języka szybszym (zwłaszcza przy porównywaniu języka kompilowanego z interpretowanym, oraz posiadającego możliwość multithreadingu).

Popularność dwóch danych języków jest bardzo spora, lecz tutaj PHP osiąga lepsze rezultaty w postaci ilości maszyn na jakich jest zainstalowany. Wiele stron takich jak Facebook czy Twitter korzystają z wielu języków jednocześnie (tworząc własne kompilacje PHP korzystając jednocześnie z takich języków jak 'D') by ominąć wady pojedyńczych rozwiązań.Przeznaczenie języków
ASP.NET jest szczególnie przystosowany do na prawdę sporych stron (i tam radzi sobie lepiej od PHP).

czwartek, 31 stycznia 2013

Czemu C#?

Joł, nazywam się... a nie to nie ten blog, bez zbędnego owijania ile mam lat czy czym się zajmuję (oh wait, czy to blog o programowaniu?).

Blog powstał z błachych powodów - nudzi mi się, a do sesji nie chce się uczyć, więc oprócz czystego programowania nie ma chyba nic lepszego niż wylać na blogu jak bardzo chujo... zajebisty dzień miałem.

No cóż, na początku zacząłem naukę programowania obiektowego z Javą, ale nigdy nie potrafiłem być wierny językom interpretowanym, to nieco rasizm, ale...
Wszystko ma swoje plusy i minusy:

Plusy języków kompilowanych:
  • Język kompilowany jest szybszy - bezpośrednia zamiana na kod maszynowy.
  • Optymizacja kodu - programista może czynić cuda za pomocą kompilatora
  • Największe możliwości - im bardziej przytulimy procesor, tym więcej się o nim dowiemy
  • Zaraz po ASM, są one korzeniem programowania - wirtualne maszyny są pisane właśnie w językach kompilowanych. Nie ma języków kompilowanych = nie ma JS, PHP, Javy, czyli właściwie tego co nazywamy internetem, tak - Twoje wypchane internetem życie  jak i fakt, że czytasz tego leniwego bloga to wina programistów, idź na piwo :)
Minusy języków kompilowanych
  •  Zwykle języki niskopoziomowe, trudne w "kodzeniu" - to w zasadzie jest plus / minus, Ja nie lubię wysokopoziomowych języków, korzystam z niektórych, gdy czas nagli i muszę unikać bugów zrobionych pod presją
  • Problem przenoszenia na inne platformy - wymaga to znajomości programisty w obsłudze kompilera, oraz pisania kodu (np obsługi dyrektyw).
Plusy języków interpretowanych:
  • Łatwa implementacja kodu - samo jego pisanie jest dużo łatwiejsze
  • Nie wymaga uruchamiania kompilatora - przemyśl plusy j. kompilowanych
  • Mogą być przenoszone pomiędzy platformami - kwestia wirtualnej maszyny, która zainstalowana pod specyficznym systemem zamienia kod programu na kod maszynowy, przykłady wirt. maszyn: (JVM, Tamarin, DOSBox hehe)
Minusy języków interpretowanych:
  •  Kod wykonuje się linia po lini - interpretując sie na bieżąco, to jest wolne!!! Co prawda umożliwia bardziej elastyczną modyfikacje i poprawki w kodzie, ale to jest (moim zdaniem) mało użyteczne. Wolny kod nie dorówna szybkiemu, a ilość błędów jest kwestią programisty
  • Oczywiście musimy mieć zainstalowaną maszyne wirtualną - nie dziw się, że masz na swoim komputerze JVM (w statystykach około 5,5 miliarda urządzeń ma to zainstalowane, a obsługiwane jest ~~ 60 języków interpretowanych), lecz, gdy spotkasz moment, gdy strona wymaga skorzystania z Microsoft Silverlight (odpowiednik Flashplayera), musisz pobrać plugin działący właśnie jak mini interpreter. Konflikt interesów

Oczywiście nie należy porównywać języków kompilowanych do asemblera, asm jest językiem programowania niskiego poziomu (najbliższego składnią do rozkazów procesora / dostępu do pamięci), i mimo, że C/C++ równierz zaliczają się do niskopoziomowych, to różnica w pisaniu kodu jest po prostu jak między maluchem a porshe ;)


Tak więc skoro już namieszaliśmy trochę w głowie z językiem kompilowanym, oraz interpretowanym, wypadało by zadać pytanie odnośnie pisania stron www:

Czy każdy język do tworzenia stron www musi być interpretowany?
Na szczęście nie, owszem, języki kompilowane nie są święte, tak jak już mówiłem - język kompilowany jest dość zależny od platformy w którą celuje ostatnia kompilacja, tak samo stawiając stronę z ASP.NET potrzebujemy do jej hostingu serwera opartego na systemie Windows Server, z postawionym IIS

Do pisania programów warto używać:
- Visual Studio 2012 Professional 1900zł
- Visual Studio 2012 Express - Freeware
- Mono - Open Source

Tu koniecznie trzeba powiedzieć, że Mono jest projektem sponsorowanym przez Xamarin, Mono umożliwia programowanie w C# jak i ASP.NET cross-platformowym!!!
Mono is a software platform designed to allow developers to easily create cross platform applications. Sponsored by Xamarin, Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime. A growing family of solutions and an active and enthusiastic contributing community is helping position Mono to become the leading choice for development of Linux applications.

Reasumując opis działania języków interpretowanych, i kompilowanych - wybieram kompilowane, i zarazem C#, oraz chętnie postukam kod w ASP.NET (ale to kiedyś tam, dobre programowanie stron w ASP.NET wymaga przygotowania, m. innymi: Html, CSS, JS, PHP, Ajax, SQL, Linq, Silverlight etc.)

To by było na tyle, w kolejnym monologu napisze o ASP.NET vs PHP, czyli starciu odwiecznych rywali bla bla bla