Vad för Programmeringsspråk ska jag lära mig nu?

Permalänk
Avstängd
Skrivet av Yoshman:

Frågan var ju om C++ är mer effektiv än t.ex. Java, i "vanlig" kod är inte skillnaden relevant, men om template-meta programmering kan användas så kan det ge C++ en enorm fördel då en rad optimeringar kan göras vi kompilering som inte är möjligt i andra språk (inte ens i Lisp).

Jo, om vi talar om prestanda så är inte Lisp vidare bra exempel. Poängen med Lisp är att det är enkelt att programmera. Men att skriva C++ templates är inte vidare produktivt och väldigt svårt att få det helt korrekt. Jag hörde av Graham, Lisp gurun, att deras backenda som senare såldes till Amazon, gjordes i Lisp. Så när konkurrenterna pratade om en ny funktion, så kunde Graham implementera funktionen på en eftermiddag eller så. På så sätt var Graham alltid före konkurrenterna, och de begrep aldrig hur Graham kunde vara så snabba. Läs hans blogg, mycket intressant läsning. Det krävs typ 10x mer C++ kod än Lisp kod för att göra samma sak. Själv börjar jag bli mer och mer såld på funktionella språk, som faktiskt är eleganta till skillnad från C/C++/C#/Java, etc. Du kan utföra magi med Lisp.

Citat:

Jobbar bl.a. med att utveckla OS-kärnor och nätverksstackar för högprestandasystem, så har hyfsad koll på tiderna det tar att processa paket. Jobbar däremot inte med börssystem, men som jag förstått det ligger man idag på latenser ner mot eller ibland till och med under 10µs.

Svarstiden på de snabbaste aktiebörssystemen som används, ligger kring 100µs, inte 10µs. Det finns experimentella system som har kring 10µs, men de är oanvändbara. Ett riktigt börssystem måste utföra massa kontroller och administration och sånt, innan en aktieorder accepteras. Dessa experimentella system gör inget sånt, de bara tar emot ordrar utan att kolla nånting. Det är inget man skulle kunna använda på riktigt.

Citat:

Vid den latensen har man inte mer än 20k-30k CPU cykler på sig per paket och det inkluderar den tid paketet ska DMA:as in och ut från NIC då jag utgår från att den latens man specifierar är latens sett från en extern box. Windows behöver ganska exakt denna tid bara på att leverera och skicka paketet genom OSet (sist jag mätte, vilket var på Win7), Linux klarar detta på strax under 10k cykler och en specialdesignat TCP/IP stack kan komma ner till kanske 2k-3k cykler.

Alla snabba börssystem som ligger kring 100-200µs, använder UDP. Det går inte att få så låg latens med TCP/IP. Ett tips till er, är att ni börjar titta på UDP om ni behöver mera prestanda.

Citat:

Som jag förstått det kör NASDAQ en "vanlig" Linux, så Java-delen kan max stå för ~50% av cyklerna i genomsnitt.

Jo, det stämmer att det är vanliga Linux som används. Men, de använder inte TCP/IP, så 50% av cyklerna kommer inte att gå åt till nätverkstrafiken.

Citat:

Linux är inte ett RTOS, så man har inte garanterad svarstiden. Men det är ändå så att med Java inför du än mer jitter då GC sker vid tillfällen du inte kan kontrollera. I majoritet av fallen handlar det om några 10-tals eller i värsta fall 100-tals µs som GC tar och det kan vara ganska långt mellan dessa tillfällen, men GC kommer att hända.

Dessa snabba aktiesystem kör inte Realtime Linux. De kör vanliga Linux. Så man kan inte garantera svarstid.

Och GC kommer aldrig att inträffa på dessa system. De hanterar allt minne själv, de allokerar massa objekt i förväg som sedan återanvänds gång på gång. Så objekt destrueras aldrig. Så GC kommer aldrig att sparka igång. Det är hemligheten.

Permalänk
Datavetare
Skrivet av saddam:

Alla snabba börssystem som ligger kring 100-200µs, använder UDP. Det går inte att få så låg latens med TCP/IP. Ett tips till er, är att ni börjar titta på UDP om ni behöver mera prestanda.

Visste faktiskt att börssystem använder UDP så cykel-värden var för UDP, men skillnaden mot TCP är inte jättestor då TCP-protokollet typiskt är det som man lägger absolut mest krut på att optimera.

Att jag skrev "TCP/IP stack" beror på att det är ett vedertaget namn på en nätverksstack i alla moderna OS då TCP är det överlägset mest använda protokollet. Naturligtvis stöds även UDP då det är ett trivialt protokoll som bara är en portabstraktion ovanpå IPv4 eller IPv6, men de flesta applikationer fungerar inte med UDP då de kräver tillförlitlig leverans av data.

Då börssystem kör UDP så har man endera implementerat sitt eget protokoll för omsändningar alt. så är det inte hela världen om en del meddelanden kommer bort, vilket i så fall borde betyda att det inte är hela världen om vissa meddelanden får lite högre latens.

Vet att jag läst om tider runt 10µs, men det kanske från någon diskussion kring de experimentella system. Frågan är varför man kör UDP om latenskraven är så låga som 100-200µs, vårt system har en latens till "first data" över TCP på klart under 10µs och kan sätta upp / riva ner ett par hundratusen sessioner per sekund körandes på relativt standard Linux-baserade Xeon-system. Vi använder fortfarande ett separat 3-way handshake, men Linux egen stack har numer stöd för att leverera data i det initiala SYN-segmentet och skicka svaret i det efterföljande SYN/ACK segmentet. Du har då samma latens över TCP som på UDP, fast alla fördelarna med TCP som garanterad leverans och automatiskt anpassning till aktuell bandbreddskapacitet!

Börssnubbarna kanske borde läsa på lite om moderna TCP-implementationer

Skrivet av saddam:

Och GC kommer aldrig att inträffa på dessa system. De hanterar allt minne själv, de allokerar massa objekt i förväg som sedan återanvänds gång på gång. Så objekt destrueras aldrig. Så GC kommer aldrig att sparka igång. Det är hemligheten.

Är detta verkligen sant?
Varför använder man i så fall överhuvudtaget Java då mycket som gör detta språk enklare än C++ är automatisk minneshantering? Automatisk minneshantering via en "tracing GC" möjligör även en hel del algoritmer som passar väldigt väl ihop med multi-core programming, men lider av ABA-probletet och/eller blir väldigt ineffektivt/krångligt att implementera (som t.ex. persistent data structurs) i frånvaro av GC.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Avstängd
Skrivet av Yoshman:

Då börssystem kör UDP så har man endera implementerat sitt eget protokoll för omsändningar alt. så är det inte hela världen om en del meddelanden kommer bort, vilket i så fall borde betyda att det inte är hela världen om vissa meddelanden får lite högre latens.

Det är extremt viktigt att alla meddelanden kommer fram, i rätt ordning, i börsystem. Vi pratar ju ändå mycket pengar som flyttas runt. Därför har börsystemen implementerat egna lättviktsprotokoll ovanpå UDP, så de märker om msg missas och kan då sända om UDP messages.

Citat:

Frågan är varför man kör UDP om latenskraven är så låga som 100-200µs,

Förlåt, det är jag som uttrycker mig luddigt. Latensen är inte 100µs i de snabbaste börssystemen. Det jag menar är att det tar 100µs från det att du skickar in en aktieaffär, tills du får svar från servern hur det gick för din order. Så det är inte latencyn som tar 100µs, utan det är serverns bearbetning av affären och matchningen och svaret. Själva latensen är mycket lägre än 100µs.

Ett av skälen till att man använder UDP, är att dagens börsystem är distribuerade. Mao, UDP messages går ut till alla serverprocesser som lyssnar, . TCP/IP går ju från en process till en annan. Dagens börssystem utgår från en matchare (som tar hand om själva aktieordern och matchar den) och sen skickar ut resultatet till alla server processer, som alla samtidigt administrerar affären, sparar på disk, skickar tillbaka svaret till banken, etc. Om man körde TCP/IP så skulle matchingsmotorn behöva prata med en serverprocess i taget, det vill man inte. Man vill ha massutskick till alla.

Citat:

Är detta verkligen sant?
Varför använder man i så fall överhuvudtaget Java då mycket som gör detta språk enklare än C++ är automatisk minneshantering? Automatisk minneshantering via en "tracing GC" möjligör även en hel del algoritmer som passar väldigt väl ihop med multi-core programming, men lider av ABA-probletet och/eller blir väldigt ineffektivt/krångligt att implementera (som t.ex. persistent data structurs) i frånvaro av GC.

Japp, det är sant. Man vill undvika GC så långt som möjligt. Ett skäl till att man använder Java istället för C++ är att Java är enklare. Men kanske starkaste skälet är politik. Högsta cheferna har bestämt att man ska standardisera på Java. Det lustiga är att många företag har ungefär samtidigt bestämt att standardisera på Java. Det låter nästan som att alla företags högsta chefer har pratat ihop sig:
-Nu ska vi alla satsa på Java!
-Nu ska vi alla satsa på ARM - så MS, Apple, HP, AMD, etc alla har börjat med ARM cpuer ungefär samtidigt
-Nu ska vi alla satsa på Linux och inte på FreeBSD!
-Nu ska vi alla satsa på... etc.

Permalänk

Hej igen, tycker nu efter en liten tid att det blir jobbigt att titta på thenewboston, Så det jag undrar blir det bara roligare med tiden?, Eller ändrar det sig?, Har även fått upp huvudet för att göra Ios appar :), Och det jag undrar då är

1.fortsätta med HTML/CSS/PHP Och allt annat
2. gå över till c++ och lära mig och göra spel(tjänar man pengar på++++)

Tack

//En mycket dyster liten pöjk

Permalänk

Tycker du hoppar väldigt mycket, håll dig till en sak och försök bli åtmistånde någorlunda bra på det så det sitter fast i hjärnbalken.
Det kommer förmodligen ta lång tid för dig att komma någonstanns om du ska byta titt som tätt. Men har du helt tröttnat på html/css så var det kanske inget för dig så då är det väl bara att hoppa på nästa sak antar jag.

Skrivet av SaP:

Hej igen, tycker nu efter en liten tid att det blir jobbigt att titta på thenewboston, Så det jag undrar blir det bara roligare med tiden?, Eller ändrar det sig?, Har även fått upp huvudet för att göra Ios appar :), Och det jag undrar då är

1.fortsätta med HTML/CSS/PHP Och allt annat
2. gå över till c++ och lära mig och göra spel(tjänar man pengar på++++)

Tack

//En mycket dyster liten pöjk

Permalänk
Skrivet av SirTiner:

Tycker du hoppar väldigt mycket, håll dig till en sak och försök bli åtmistånde någorlunda bra på det så det sitter fast i hjärnbalken.
Det kommer förmodligen ta lång tid för dig att komma någonstanns om du ska byta titt som tätt. Men har du helt tröttnat på html/css så var det kanske inget för dig så då är det väl bara att hoppa på nästa sak antar jag.

Haha, nu blev jag pigg igen, Kan åtminstonde ge det ett försök

Permalänk
Medlem

Det bästa sättet att hålla sig intresserad är att skapa någonting. Att bara göra exempel eller övningar är tråkigt. Gör någonting riktigt.

Skapa en blog med wordpress, gör om designen och sälj lufthästar.

Gör ett asteroids i JavaScript.

Skriv en hemsida som läser in de senaste posterna på SweClockers, samt senaste TV-programmen på Barnkanalen, så kan du ha en egen startsida i webbläsaren!

Skriv en app till din telefon som läser av busstiderna på bussen du oftast åker med.

Skriv ett program som visar vädret 5 dagar framåt i Allingsås.

Skapa en riktigt bra äggklocka/timer till din telefon.

Skriv ett program som startar ett program på din dator så fort du kommer hem med telefonen.

Skapa en hemsida för att visa alla tuffa HTML tekniker du kan.

etc etc.

Gör någonting riktigt, vad som helst, så blir det tusen gånger roligare än att göra massa exempel - Sikta mycket lågt i början, sen kan du utveckla det hela. Typ alla grejerna jag gav förslag om där ovan kan du göra i en hemsida eller i en app, bara börja bygga - man kan programmera precis vad som helst, det finns nästan aldrig någon begränsning, annat än tid och energi.

1. Börja med en liten hemsida i vanligt html/css.
2. Släng på javascript styling, typ bootstrap eller jquery ui,
3. Koppla mot databas, så att du kan uppdatera kontent på sidan via formulär
4. Gör så att hela sidan ladda i ajax
5. fixa microformats på din egen lilla hemsida
6. SEO anpassa sidan
7. Använd plugins till sidan - t.ex. generera ett excel eller PDF dokument av ditt CV

etc etc - Börja litet, väx sakta mot mer avancerade grejer, men bygg någonting du vill använda - t.ex. en sida som läser upp tidningsartiklar/rubriker/poster på sweclockers etc.

Permalänk
Medlem

Minst lika viktigt är att lära sig de områden man tänker sig jobba inom, ett språk är ju ändå "bara" ett språk, självklart ska man kunna uttrycka sig men det viktigaste är ändå vad man uttrycker.

Så lär dig lite allt möjligt ekonomi..etc utöver programmeringen, det finns faktiskt en anledning att till exempel data och systemventenskapliga linjen inte är så enormt inriktad emot enbart kodknackning.

Missförstå mig rätt, du SKA kunna programmering och datastruktuer, algoritmer, patterns ...etc men om man frågar sig om man ska lära sig det tredje eller fjärde programmeringsspråket så kanske man först ska inrikta sig på att lära sig de områden där man kommer använda sina programmeringskunskaper först.

Jag kan lova dig att kunderna i princip förväntar sig att du ska vara expert på just deras business områden, låter märkligt men så funkar det i världen.

Permalänk
Skrivet av Ernesto:

Det bästa sättet att hålla sig intresserad är att skapa någonting. Att bara göra exempel eller övningar är tråkigt. Gör någonting riktigt.

Skapa en blog med wordpress, gör om designen och sälj lufthästar.

Gör ett asteroids i JavaScript.

Skriv en hemsida som läser in de senaste posterna på SweClockers, samt senaste TV-programmen på Barnkanalen, så kan du ha en egen startsida i webbläsaren!

Skriv en app till din telefon som läser av busstiderna på bussen du oftast åker med.

Skriv ett program som visar vädret 5 dagar framåt i Allingsås.

Skapa en riktigt bra äggklocka/timer till din telefon.

Skriv ett program som startar ett program på din dator så fort du kommer hem med telefonen.

Skapa en hemsida för att visa alla tuffa HTML tekniker du kan.

etc etc.

Gör någonting riktigt, vad som helst, så blir det tusen gånger roligare än att göra massa exempel - Sikta mycket lågt i början, sen kan du utveckla det hela. Typ alla grejerna jag gav förslag om där ovan kan du göra i en hemsida eller i en app, bara börja bygga - man kan programmera precis vad som helst, det finns nästan aldrig någon begränsning, annat än tid och energi.

1. Börja med en liten hemsida i vanligt html/css.
2. Släng på javascript styling, typ bootstrap eller jquery ui,
3. Koppla mot databas, så att du kan uppdatera kontent på sidan via formulär
4. Gör så att hela sidan ladda i ajax
5. fixa microformats på din egen lilla hemsida
6. SEO anpassa sidan
7. Använd plugins till sidan - t.ex. generera ett excel eller PDF dokument av ditt CV

etc etc - Börja litet, väx sakta mot mer avancerade grejer, men bygg någonting du vill använda - t.ex. en sida som läser upp tidningsartiklar/rubriker/poster på sweclockers etc.

Det där med Wordpress verkar roligt, En kompis till mig vill bli bloggare, Så passar perfekt :), Nu är det ju bara MYSQL Och webbhotel som gäller behöver lite hjälp

Skrivet av bjobb:

Minst lika viktigt är att lära sig de områden man tänker sig jobba inom, ett språk är ju ändå "bara" ett språk, självklart ska man kunna uttrycka sig men det viktigaste är ändå vad man uttrycker.

Så lär dig lite allt möjligt ekonomi..etc utöver programmeringen, det finns faktiskt en anledning att till exempel data och systemventenskapliga linjen inte är så enormt inriktad emot enbart kodknackning.

Missförstå mig rätt, du SKA kunna programmering och datastruktuer, algoritmer, patterns ...etc men om man frågar sig om man ska lära sig det tredje eller fjärde programmeringsspråket så kanske man först ska inrikta sig på att lära sig de områden där man kommer använda sina programmeringskunskaper först.

Jag kan lova dig att kunderna i princip förväntar sig att du ska vara expert på just deras business områden, låter märkligt men så funkar det i världen.