Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Hur skiljer sig Java frÄn andra populÀra sprÄk? Varför ska Java vara det första sprÄket att lÀra sig? LÄt oss skapa en plan som hjÀlper dig att lÀra dig Java bÄde frÄn grunden och genom att tillÀmpa programmeringskunskaper pÄ andra sprÄk. LÄt oss lista skillnaderna mellan att skapa produktionskod i Java och att utveckla pÄ andra sprÄk. Mikhail Zatepyakin lÀste denna rapport vid ett möte för framtida deltagare praktikplatser Yandex och andra nybörjarutvecklare - Java Junior meetup.


— Hej alla, jag heter Misha. Jag Ă€r en utvecklare frĂ„n Yandex.Market, och idag kommer jag att berĂ€tta varför du ska lĂ€ra dig Java och hur du gör det effektivt. Du kanske stĂ€ller en rimlig frĂ„ga: varför kommer jag att berĂ€tta den hĂ€r historien, och inte nĂ„gon stark utvecklare med mĂ„nga Ă„rs erfarenhet? Faktum Ă€r att jag sjĂ€lv studerade Java nyligen, för ungefĂ€r ett och ett halvt Ă„r sedan, sĂ„ jag minns fortfarande hur det var och vilka fallgropar det finns.

För ett Är sedan fick jag en praktikplats pÄ Yandex.Market. Jag utvecklade backend för Beru, för sjÀlva marknaden, du anvÀnde det förmodligen. Nu fortsÀtter jag att jobba dÀr, i ett annat team. Vi skapar en analytisk plattform för Yandex.Market för affÀrspartners.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

LÄt oss börja. Varför lÀra sig Java ur en praktisk synvinkel? Faktum Àr att Java Àr ett mycket kÀnt programmeringssprÄk. Den har ett mycket stort samhÀlle.

Det finns till exempel ett sÄdant TIOBE-index, ett populÀrt index över programmeringssprÄkens popularitet, och Java rankas först dÀr. PÄ jobbsajter kommer du förmodligen ocksÄ att mÀrka att de flesta lediga jobb handlar om Java, det vill sÀga genom att utveckla i Java kan du alltid hitta ett jobb.

Eftersom gemenskapen Àr mycket stor, kommer alla frÄgor du har att hitta svar pÄ vissa Stack Overflow eller andra webbplatser. Dessutom, nÀr du utvecklar i Java, skriver du faktiskt kod pÄ JVM, sÄ du kan enkelt byta till Kotlin, Scala och andra sprÄk som anvÀnder JVM.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Vad Àr bra med Java ur ideologisk synvinkel? Det finns olika programmeringssprÄk. De löser olika problem, det vet du. Till exempel Àr Python utmÀrkt för att skriva enradsskript för att lösa snabba problem.

PÄ plussidan kan du helt kontrollera den körbara koden. Till exempel har vi bilar, Yandex förarlösa bilar, deras kod Àr skriven med plus. Varför? Java har en sÄdan sak - Garbage Collector. Det rensar RAM frÄn onödiga föremÄl. Den hÀr saken startar spontant och stoppar-vÀrlden, det vill sÀga den stoppar resten av programmet och gÄr för att rÀkna objekt, rensa minnet av objekt. Om nÄgot sÄdant fungerar i en drönare Àr det inte coolt. Din drönare kommer att köra rakt, i detta ögonblick rensa minnet och inte titta pÄ vÀgen alls. DÀrför Àr drönaren skriven pÄ proffsen.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Vilka problem löser Java? Det Àr frÀmst ett sprÄk för att utveckla stora program som Àr skrivna över Är, av dussintals eller hundratals personer. I synnerhet Àr mycket av backend i Yandex.Market skrivet i Java. Vi har ett fördelat team i flera stÀder, tio personer i varje. Och koden Àr lÀtt att underhÄlla, den har stötts i tio Är eller mer, och samtidigt kommer nya mÀnniskor in och förstÄr den hÀr koden.

Vilka egenskaper ska ett sprÄk ha sÄ att koden i det lÀtt stöds och sÄ att det enkelt kan utvecklas i stora team. Först och frÀmst ska det vara lÀsbar kod och det ska vara lÀtt att implementera komplexa arkitektoniska lösningar. Det vill sÀga att det ska vara lÀtt att skriva abstraktioner pÄ hög nivÄ etc. Allt detta Àr vad Java förser oss med. Detta Àr ett objektorienterat sprÄk. Det Àr verkligen lÀtt att implementera abstraktioner pÄ hög nivÄ och komplexa arkitekturer.

Det finns ocksÄ en hel del ramverk och bibliotek för Java, eftersom sprÄket Àr mer Àn 15 Är gammalt. Under den hÀr tiden skrevs allt som kunde skrivas pÄ den, sÄ det finns massor av bibliotek för allt du kan behöva.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Vilka grundlÀggande fÀrdigheter, enligt min mening, bör en nybörjare JA-spelare ha? Först och frÀmst Àr detta kunskap om Javas kÀrnsprÄk. NÀsta Àr nÄgon form av Dependency Injection-ramverk. NÀsta talare, Kirill, kommer att prata mer om detta. Jag ska inte gÄ för djupt. NÀsta Àr arkitekturen och designmönstren. Vi behöver kunna skriva arkitektoniskt vacker kod för att kunna skriva stora applikationer. Och detta Àr nÄgon form av SQL eller ORM för uppgifter att arbeta med databasen. Och detta gÀller mer för backend.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

GÄ! Java kÀrna. Jag kommer inte riktigt att upptÀcka Amerika hÀr - du mÄste kunna sprÄket i sig. Vad du bör vara uppmÀrksam pÄ. För det första har Java slÀppt mÄnga versioner de senaste Ären, det vill sÀga 2014-2015 slÀpptes den sjunde, sedan den Ättonde, nionde, tionde, mÄnga nya versioner, och en massa nya coola saker introducerades i dem t ex Java Stream API , lambda etc. JÀttefina, frÀscha, coola saker som anvÀnds i produktionskod, vad de frÄgar om i intervjuer och som du behöver veta. DÀrför bör du inte ta en bok frÄn hyllan i Java-4-biblioteket och gÄ och lÀra dig den. Det hÀr Àr vÄr plan: vi lÀr oss Java-8 eller högre.

Vi uppmÀrksammar innovationer som Stream API, var etc. De tillfrÄgas under intervjuer och anvÀnds stÀndigt i produktionen. Det vill sÀga Stream API Àr mycket coolare Àn loopar, i allmÀnhet en vÀldigt cool sak. Var noga med att vara uppmÀrksam.

Och det finns alla möjliga saker som iteratorer, undantag och sÄ vidare. Saker som verkar oviktiga för dig sÄ lÀnge du skriver nÄgon liten kod sjÀlv. Du behöver inte dessa undantag, vem behöver dem egentligen? Men de kommer definitivt att tillfrÄgas vid intervjuer, de kommer definitivt att vara anvÀndbara för dig i produktionen. I allmÀnhet bör du vara uppmÀrksam pÄ Undantag, iteratorer och andra saker.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Data struktur. Du kan inte gÄ utan strukturer, men det kommer att vara bra om du inte bara vet att det finns uppsÀttningar, ordböcker och ark. Och Àven olika implementeringar av strukturer. Till exempel har samma ordbok i Java mÄnga implementeringar, inklusive HashMap och TreeMap. De har olika asymptotik, de Àr strukturerade olika inuti. Du mÄste veta hur de skiljer sig och nÀr du ska anvÀnda vilken.

Det kommer ocksÄ att vara vÀldigt hÀftigt om du vet hur dessa datastrukturer fungerar internt. Det vill sÀga, det Àr inte lÀtt att veta deras asymptotik - hur mycket insatsen fungerar, hur lÀnge passet fungerar, men hur strukturen fungerar inuti - till exempel vad Àr en hink i HashMap.

Det Àr ocksÄ vÀrt att uppmÀrksamma trÀd och grafer. Det hÀr Àr saker som inte Àr sÀrskilt vanliga i produktionskod, men de Àr populÀra i intervjuer. DÀrför mÄste du kunna korsa trÀd, grafer i bredd och djup. Dessa Àr alla enkla algoritmer.

SÄ snart du börjar skriva en stor kod, komplex, med hjÀlp av bibliotek, flerklasskod, kommer du att inse att det Àr svÄrt för dig utan att bygga system och lösa beroenden. Dessa Àr i första hand Maven och Gradle. De lÄter dig importera bibliotek till ditt projekt pÄ en rad. Det vill sÀga du skriver en enrads xml och importerar bibliotek till projektet. Bra system. De Àr ungefÀr likadana, anvÀnd antingen en - Maven eller Gradle.

NÀsta - nÄgot slags versionskontrollsystem. Jag rekommenderar Git eftersom det Àr populÀrt och det finns massor av tutorials. NÀstan alla anvÀnder Git, det Àr en cool grej, du kan inte leva utan det.

Och nÄgon form av utvecklingsmiljö. Jag rekommenderar IntelliJ Idea. Det pÄskyndar utvecklingsprocessen avsevÀrt, hjÀlper dig mycket, skriver all kod för dig, i allmÀnhet Àr det coolt.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

LÀnkar frÄn bilden: SQLZOO, habrapost

SQL. Lite om backenders. Det var faktiskt ett roligt fall hÀr. TvÄ dagar innan min andra praktikintervju ringde en HR-tjej mig och sa att om tvÄ dagar skulle de frÄga mig om SQL och HTTP, jag behövde lÀra mig det. Och jag visste nÀstan ingenting om SQL eller HTTP. Och jag hittade den hÀr coola sidan - SQLZOO. Jag lÀrde mig SQL pÄ det pÄ 12 timmar, jag menar, SQL-syntax, hur man skriver SELECT-frÄgor, JOIN, etc. Mycket cool sida, jag rekommenderar den starkt. Faktum Àr att jag pÄ 12 timmar lÀrde mig 90 % av det jag vet nu.

Och det Àr ocksÄ bra att kÀnna till databasarkitektur. Dessa Àr alla typer av nycklar, index, normalisering. Det finns en rad inlÀgg om detta pÄ Habré.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

I Java finns det förutom SQL alla möjliga objektrelationella kartlĂ€ggningssystem som JPA. Det finns nĂ„gon kod. I den första metoden finns det lite SQL-kod - VÄLJ ID-namn FRÅN info.users WHERE id IN userIds. FrĂ„n anvĂ€ndardatabasen, frĂ„n tabellen, hĂ€mtas deras ID och namn.

DÀrefter finns det en viss kartlÀggare som förvandlar ett objekt frÄn basen till ett Java-objekt. Och det finns en tredje metod nedan som faktiskt kör den hÀr koden. Allt detta kan ersÀttas med JPA med en rad, vilket Àr skrivet nedan. Det gör samma sak - hitta All ByIdIn. Det vill sÀga, baserat pÄ namnet pÄ metoden genererar den en SQL-frÄga Ät dig.

VÀldigt cool grej. Jag sjÀlv, nÀr jag inte kunde SQL, anvÀnde JPA. Var uppmÀrksam i allmÀnhet. Om du Àr för lat för att lÀra dig SQL Àr det en katastrof. Och i allmÀnhet eld!

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

VĂ„r. Vem har hört talas om en sĂ„dan sak som Spring-ramverket? Ser ni hur mĂ„nga ni Ă€r? Inte utan anledning. Spring ingĂ„r i kraven för varannan Java-backend-vakans. Utan det finns det verkligen ingenstans i en stor utveckling. Vad Ă€r vĂ„ren? Först och frĂ€mst Ă€r detta en Dependency Injection-ramverk. Även om detta kommer berĂ€tta nĂ€sta talare. Men kort sagt, detta Ă€r en sak som lĂ„ter dig göra det lĂ€ttare att importera beroenden för vissa klasser till andra. Det vill sĂ€ga att kunskapen om beroenden förenklas.

Spring Boot Àr en del av Spring som lÄter dig köra din serverapplikation med en knapp. Du gÄr till THID, trycker pÄ ett par knappar och nu har du din serverapplikation igÄng pÄ localhost 8080. Det vill sÀga, du har inte skrivit en enda kodrad Àn, men det fungerar redan. VÀldigt cool grej. Om du skriver nÄgot eget, eld!

VÄren Àr en vÀldigt stor ram. Det plockar inte bara upp din serverapplikation och löser Dependency Injection. Det lÄter dig göra en massa saker, inklusive att skapa REST API-metoder. Det vill sÀga, du skrev nÄgon metod och bifogade Get mapping-anteckningen till den. Och nu har du redan nÄgon metod pÄ localhost som skriver Hello world till dig. TvÄ rader kod och det fungerar. Coola saker.

VÄren gör ocksÄ skrivproven lÀttare. Det gÄr inte att testa i stor utveckling. Koden mÄste testas. För detta ÀndamÄl har Java ett coolt bibliotek JUnit 5. Och JUnit i allmÀnhet, men den senaste versionen Àr den femte. Det finns allt för att testa, alla möjliga pÄstÄenden och annat.

Och det finns ett fantastiskt Mockito-ramverk. FörestÀll dig att du har nÄgon funktionalitet som du vill testa. Funktionaliteten gör mÄnga saker, inklusive nÄgonstans i mitten loggar den in pÄ VKontakte med ditt ID, till exempel, och tar emot för- och efternamnet pÄ VKontakte-anvÀndaren frÄn ID:t. Du kommer förmodligen inte att inkludera VKontakte i testerna, det Àr konstigt. Men du mÄste testa funktionaliteten, sÄ du gjorde den hÀr klassen, med hjÀlp av Mockito, mok it, imiterade den.

Du kommer att sÀga att nÀr en förfrÄgan kommer till den hÀr klassen med ett ID sÄ och sÄ, returnerar det nÄgot efternamn, till exempel Vasya Pupkin. Och det kommer att fungera. Det vill sÀga, du kommer att testa all funktionalitet för mok one class. VÀldigt cool grej.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

LÀnk frÄn bild

Design mönster. Vad det Àr? Det hÀr Àr mallar för att lösa typiska problem som uppstÄr i utvecklingen. I utvecklingen uppstÄr ofta identiska eller liknande problem som det skulle vara bra att lösa pÄ nÄgot sÀtt bra. DÀrför kom folk pÄ bÀsta praxis, vissa mallar, för hur man löser dessa problem.

Det finns en webbplats med de mest populÀra mönstren - refactoring.guru, du kan lÀsa den, ta reda pÄ vilka mönster det finns, lÀsa en massa teorier. Problemet Àr att det praktiskt taget Àr vÀrdelöst. Faktum Àr att mönster utan övning inte Àr sÀrskilt anvÀndbara.

Du kommer att höra om nÄgra mönster som Singletone eller Builder. Vem hörde dessa ord? MÄnga mÀnniskor. Det finns sÄ enkla mönster som du kan implementera sjÀlv. Men de flesta av mönstren: strategi, fabrik, fasad - det Àr inte klart var de ska tillÀmpas.

Och tills du i praktiken i nÄgon annan persons kod ser en plats dÀr detta mönster appliceras, kommer du inte att kunna tillÀmpa det sjÀlv. DÀrför Àr övning vÀldigt viktigt med mönster. Och att bara lÀsa om dem pÄ refactoring.guru Àr inte sÀrskilt bra, men det Àr definitivt vÀrt att göra.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Varför behövs mönster? LÄt oss sÀga att du har en viss anvÀndarklass. Den har ett ID och ett namn. Varje anvÀndare mÄste ha bÄde ett ID och ett namn. LÀngst upp till vÀnster Àr klassrummet.

Vilka Àr sÀtten att initiera anvÀndare? Det finns tvÄ alternativ - antingen en konstruktör eller en sÀttare. Vilka Àr nackdelarna med bÄda metoderna?

Konstruktör. ny anvÀndare (7, "Bond"), okej. LÄt oss nu sÀga att vi inte har en anvÀndarklass, utan nÄgon annan, med sju numeriska fÀlt. Du kommer att ha en konstruktor som innehÄller sju pÄ varandra följande nummer. Det Àr inte klart vilka dessa siffror Àr och vilka av dem som hör till vilken fastighet. Designern Àr inte bra.

Det andra alternativet Ă€r setter. Du skriver tydligt: ​​setId(7), setName(“Bond”). Du förstĂ„r vilken egendom som hör till vilket omrĂ„de. Men setter har ett problem. För det första kan du glömma att tilldela nĂ„got, och för det andra visar sig ditt objekt vara förĂ€nderligt. Detta Ă€r inte trĂ„dsĂ€kert och minskar kodens lĂ€sbarhet nĂ„got. Det var dĂ€rför folk kom pĂ„ ett coolt mönster – Builder.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Vad handlar det hĂ€r om? LĂ„t oss försöka kombinera fördelarna med bĂ„da tillvĂ€gagĂ„ngssĂ€tten – sĂ€tter och konstruktör – i ett. Vi gör ett visst objekt, Builder, som Ă€ven kommer att ha Id- och Name-fĂ€lt, som i sig kommer att byggas utifrĂ„n sĂ€ttaren, och som kommer att ha en Build-metod som ger dig en ny AnvĂ€ndare med alla parametrar. Vi fĂ„r ett oförĂ€nderligt föremĂ„l och en setter. HĂ€ftigt!

Vilka Àr problemen? HÀr har vi den klassiska Builder. Problemet Àr att vi fortfarande kan glömma att checka i nÄgot fÀlt. Och om vi glömde att besöka ID:t, i det hÀr fallet i Builder initieras det till noll, eftersom int-typen inte Àr nullbar. Och om vi gör namnet "Bond" och glömmer att besöka ID-kontoret, kommer vi att ha en ny anvÀndare med id "0" och namnet "Bond". Inte coolt.

LÄt oss försöka bekÀmpa detta. I Builder kommer vi att Àndra int till int sÄ att det Àr nullbart. Nu Àr allt jÀttebra.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Om vi ​​försöker skapa en anvĂ€ndare med namnet "Bond", och glömmer att ange hans ID, kommer vi att fĂ„ ett undantag för nollpekare, eftersom ID:t inte Ă€r nullbart, och byggaren har ett noll, specifikt pekareundantag.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Men vi kan fortfarande glömma att ange ett namn, sÄ vi stÀller in objektrespel till noll. Nu, nÀr vi bygger vÄrt objekt frÄn Builder, kontrollerar det att fÀltet inte Àr nullbart. Och det Àr inte allt.

LÄt oss titta pÄ det sista exemplet. I det hÀr fallet, om vi pÄ nÄgot sÀtt sÀtter null i ID-körtiden, skulle det vara bra att omedelbart veta att du gjorde det och det Àr inte coolt att du gör ett misstag nu.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Du mÄste skicka ett fel inte i ögonblicket för anvÀndarskapandet, utan nÀr du stÀller in null till ID:t. DÀrför kommer vi i Builder att Àndra sÀttaren Integer till int, och han kommer omedelbart att svÀra att de kastade ut null.

Kort sagt, vad Àr poÀngen? Det finns ett enkelt Builder-mönster, men Àven dess implementering har nÄgra finesser, sÄ det Àr vÀldigt coolt att titta pÄ olika implementeringar av mönster. Varje mönster har dussintals implementeringar. Det hÀr Àr mycket intressant.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Hur skriver vi Builder i produktionskod? HÀr Àr vÄr anvÀndare. Vi bifogar en Builder-rotation frÄn Lombok-biblioteket till den, och den skapar sjÀlv en Builder Ät oss. Det vill sÀga, vi skriver ingen kod, men Java tror redan att den hÀr klassen har en Builder, och vi kan kalla det sÄ hÀr.

Jag har redan sagt att Java har bibliotek för nÀstan allt, inklusive Lombok, ett coolt bibliotek som lÄter dig slippa skriva boilerplate. Byggare, GET.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Mönster kan vara arkitektoniska - relaterade inte bara till en klass, utan till systemet som helhet. Det finns en sÄ cool princip i systemdesign: Single Responsibility Principle. Vad pratar han om? Det faktum att varje klass mÄste ansvara för en del av sin egen funktionalitet. I det hÀr fallet har vi en Controller som kommunicerar med anvÀndare, JSON-objekt. Det finns Facade, som konverterar JSON-objekt till modeller som Java-applikationen sedan kommer att arbeta med. Det finns en tjÀnst som har komplex logik som fungerar med dessa modeller. Det finns ett Data Access Object som placerar dessa modeller i databasen och hÀmtar dem frÄn databasen. Och dÀr finns sjÀlva databasen. Det Àr med andra ord inte allt i en klass, men vi gör fem olika klasser, och det Àr ett annat mönster.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

NÀr du mer eller mindre har lÀrt dig Java Àr det bra att skriva ditt eget projekt som kommer att ha en databas, arbeta med andra API:er och exponera din serverapplikation för REST API-klienter. Detta skulle vara en bra sak att lÀgga till i ditt CV, det skulle vara ett coolt avslut pÄ din utbildning. Med detta kan du gÄ och fÄ ett jobb.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

HÀr Àr ett exempel pÄ min serverapplikation. Under mitt andra Är skrev jag en terminsuppsats med killarna. De skrev en mobilapplikation för att organisera evenemang. DÀr kunde anvÀndare logga in via VKontakte, placera punkter pÄ kartan, skapa evenemang, bjuda in sina vÀnner till dem, spara bilder pÄ evenemang osv.

Vad gjorde jag i projektet? Skrev en serverapplikation i Spring Boot utan att anvÀnda SQL. Jag kÀnde honom inte, jag anvÀnde JPA. Vad kunde det göra? Logga in pÄ VK via OAuth-2. Ta anvÀndarens token, gÄ till VK med den, kontrollera att det Àr en riktig anvÀndare. FÄ information om anvÀndare via VKontakte. Den kunde spara information i en databas, Àven genom JPA. Spara skickligt bilder och andra filer i datorns minne och spara lÀnkar till dem i databasen. Vid den tiden visste jag inte att det fanns CLOB-objekt i databasen, sÄ jag gjorde det pÄ det hÀr sÀttet. Det fanns ett REST API för anvÀndare, klientapplikationer. Och det fanns enhetstester för grundlÀggande funktionalitet.

[
] Ett litet exempel pĂ„ min framgĂ„ngsrika inlĂ€rning av Java. Under mitt första Ă„r pĂ„ universitetet lĂ€rde jag mig C# och fick en förstĂ„else för OOP-programmering - vad klasser, grĂ€nssnitt, abstraktion Ă€r och varför de behövs. Det hjĂ€lpte mig mycket. Utan detta Ă€r det ganska svĂ„rt att lĂ€ra sig Java, det Ă€r inte klart varför klasser behövs.

Varför lÀra sig Java och hur man gör det effektivt. Yandex rapport

Under mitt andra Är pÄ universitetet lÀrde de Äterigen Java core, men jag slutade inte dÀr, jag gick sjÀlv för att studera Spring och skrev en kursuppsats, mitt projekt, som jag nÀmnde ovan. Och med allt detta gick jag pÄ praktik pÄ Yandex, klarade en intervju och kom in pÄ Yandex.Market. DÀr skrev jag backend för Beru, det hÀr Àr vÄr marknadsplats, och för sjÀlva Yandex.Market.

Efter det, för ett halvÄr sedan, gick jag över till ett annat team inom samma Market. Vi gör analyser för affÀrspartners. Vi Àr i den analytiska plattformen, vi Àr tre pÄ backend, sÄ jag har en vÀldigt stor del av inflytandet pÄ projektet. Det Àr vÀldigt intressant, faktiskt. Det vill sÀga, vi tillhandahÄller faktiskt data om marknaden - vad försÀljningen Àr, i vilka kategorier, i vilka modeller, för affÀrspartners, stora vÀlkÀnda företag. Och vi Àr bara tre, vi skriver den hÀr koden, och den Àr vÀldigt cool.

Tack! AnvÀndbara lÀnkar:
- "Java 8. Nybörjarguide".
- Data struktur.
- SQLZOO.
- Databasnormalisering.
- Design mönster.
- Design mönster.
- Ren kod.
- Effektiv Java.

KĂ€lla: will.com

LĂ€gg en kommentar