Färdig med Codecademy, vad är nästa steg för att lära sig mer Python?

Permalänk
Entusiast

Färdig med Codecademy, vad är nästa steg för att lära sig mer Python?

Som titeln lyder, vad är nästa steg? Gillade Codecademy. Hyfsat pedagogiskt upplägg som går igenom grundläggande syntax och diverse egenheter. Så nu känns det som jag har fått en ytlig introduktion till grunderna i Python. Har folk något tips på nästa steg? Finns det liknande sidor men som går lite djupare så man lär sig mer? Eller finns det någon intressant litteratur online att läsa? Jag är dålig på att hitta på egna projekt så vore trevligt med en sida med uppgifter att lösa. Den enda jag känner till är Project Euler men där ligger ju fokus på att hitta smarta sätt att lösa matteproblem snarare än att öva på programmering i allmänhet. Har lekt lite med den tidigare men det är inte riktigt den typen av uppgifter jag är ute efter.

Visa signatur

Q9450, HD4850, 8 GB DDR2 800 MHz, 3x750 GB, Antec 300, Dell 2408WFP, U2410, Qnap TS-419p+ 4x2 TB Samsung F4, Asus UL30A-QX056V, Logitech Z-680, Sennheiser HD380pro, M-Audio FastTrack Pro, Ibanez sa160qm, Ibanez TB 15R, Zoom 505II, Ibanez GSR 200, Ibanez SW 35, Cort AC-15, Squier SD-3 BBL, Yamaha PSR 270, Røde NT1-A, Nikon D200, Nikkor 18-70/3,5-4,5, 70-300VR, 50/1,8, 28/2,8, Tamron 17-50/2,8, 90/2,8, Sigma 30/1,4, SB-800, SB-25, SB-24

Permalänk
Permalänk
Medlem

Nästa steg är att du lär dig databaser och sedan skriver simpla python program som läser/skriver data från databasen. Du kommer behöva databaser för de flesta program/webbsidor så lika bra att lära sig det direkt.

T.ex.

Gör ett python program som ansluter till din databas. Programmet ska kolla om tabellerna "produkter" och "kunder" finns. Om inte, skapa dem. Sedan kollar programmet att kolumnerna product_id, product_name, product_description och product_price finns i tabellen produkter. Om inte, skapa dem. Programmet ska sedan kolla om kolumnerna kund_id och kund_namn finns. Om inte, skapa dem.

Fortsätt sedan med t.ex. att programmet ska kunna visa alla produkter, lägga till nya produkter, uppdatera existerande produkter samt ta bort produkter. Likadant med kunder.

Har du fått det klart lägger du till en ny tabell som heter "ordrar" och lägger till kolumnerna order_id, product_id och kund_id och du ska kunna skapa en ny order i programmet. Efter det har du ett ordersystem klart.

Du kommer lära dig otroligt mycket på att göra ett eget, simpelt ordersystem till skillnad från att grotta ner dig i någon bok.

Visa signatur

9950X3D - 3090 - 2x48GB 6000@30

Permalänk
Hedersmedlem

Jag ser egentligen inget substitut till att skriva egna små program, då man även för väldigt enkla uppgifter snabbt upptäcker nya saker hos språket, och "tvingas" utvecklas. När man gör det så googlar man runt, hittar mer information, ser nya "best practices", läser på om varför de finns, etc. Det ger ett komplement till att följa en tillrättalagd guide eller läsa språkreferenser — både delar behövs.

Pythons dokumentation är i mina ögon riktigt bra, och standardbiblioteket är vettigt och intuitivt, så det går att lösa det mesta om man bara "dyker ner" och inte är rädd för att googla. Företrädelsevis bör det i mina ögon vara saker som man faktiskt använder själv, i någon mån — Project Euler går sällan in under den kategorin, vilket gör att man ofta skriver program som man sällan återvänder till, och kanske frångår "best practices" och läsbarhet av kod (vilket egentligen är det viktigaste att lära sig för mjukvarudesign och att utvecklas i språket) till förmån för prestanda och få rader. Project Euler är snarare något man kan använda för att lära sig om generell datavetenskap och matematik än om praktisk programdesign.

Några enkla programidéer:

  • "Glosfrågesporter" där man skriver in en lista som slumpar fram frågor till en terminal (jag minns att jag skrev ett för att plugga in sommar-OS-städer som ett vad ).

  • Parsa en viss hemsida och presentera information (parsa med reguljära uttryck om man vill ha det jobbigt, eller med BeautifulSoup om man vill se en ytterst trevlig modul som uppvisar många styrkor hos Python).

  • Logganalyserare, som exempelvis tar en IRC-logg och presenterar en lista över vilka som skickat flest inlägg, medellängd på meddelanden, etc.

  • Fördrinkberäknare som tar antal personer och exempelvis önskad alkoholmängd per person och ger en inköpslista och presenterar det på ett fint sätt.

Ovanstående projekt är som sagt väldigt enkla på många sätt, men de är ändå lärorika om man har viljan att utvecklas och hela tiden lista ut hur man gör saker på bästa sätt. När man skrivit ett sådant enkelt program så bör man gå tillbaka i framtiden och titta på det igen för att uppdatera det efter vad man lärt sig sedan senast, och se vad man gjorde på mindre bra sätt tidigare. Om det är program som man faktiskt använder till något så är chansen mycket större att man faktiskt utvecklar och utvecklas av dessa program.

Enkla programidéer går också ofta att bygga ut med lite kreativitet som brukar uppstå när man pillar med dem. Webparsningsprogrammet kanske kan logga ens inläggantal på SweClockers varje natt och lagra detta i en databas som sedan kan presentera statistik över hur många man skrivit en viss månad, eller lagra en datapunkt med tid för varje inlägg och visa när på dygnet man är mest aktiv.

Ett annat mindre projekt jag kom att tänka på är att jag skrev ett program för att skapa en personlig RSS-feed från en viss webcomic som saknade en sådan. Det körs fortfarande varje midnatt på min dator, sparar ned bilden i en lokal cache och genererar en lokal RSS-feed som bäddar in denna bild som min RSS-läsare lyssnar på. Ett enkelt program, men innehåller ändå i sitt nuvarande tillstånd saker som hämtning av webbresurser, lokal I/O, att använda externa RSS-moduler, etc. Dessutom är det lärorikt att se till att skriva det ordentligt och läsbart, med docstrings, följa PEP-8, sköta det med ordentlig versionshantering (exempelvis Mercurial är ju i sig skrivet i Python), kanske generalisera det genom att läsa data från en extern konfigurationsfil så att det kan stöda flera serier, etc. Som sagt: låt kreativiteten flöda . Att känna att man kan få en idé och faktiskt genomföra den är en av de bästa uppmuntringarna som finns till att fortsätta programmera — det ska vara roligt och i längden belönande.

Att direkt börja med större program har nackdelen att man kanske inte lägger lika mycket tid på detaljer som man kan göra i mindre program. Har man väl grunden vad gäller att intuitivt kunna välja rätt datastrukturer (en enorm del av all programmering), strukturera programmet i funktioner/klasser/metoder och välja rätt paradigm där den passar bäst, vara bekväm med versionshantering och sin editor där man kanske bakar in statisk kodanalys och debuggning, osv, så är det sedan mycket enklare att börja med ett större projekt. Därifrån kan man lära sig att skriva egna moduler, enhetstester, fortsätta lära sig nya bibliotek och bli bättre och bättre på att skriva läs- och hållbar kod.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Entusiast
Skrivet av phz:

Jag ser egentligen inget substitut till att skriva egna små program, då man även för väldigt enkla uppgifter snabbt upptäcker nya saker hos språket, och "tvingas" utvecklas. När man gör det så googlar man runt, hittar mer information, ser nya "best practices", läser på om varför de finns, etc. Det ger ett komplement till att följa en tillrättalagd guide eller läsa språkreferenser — både delar behövs.

Pythons dokumentation är i mina ögon riktigt bra, och standardbiblioteket är vettigt och intuitivt, så det går att lösa det mesta om man bara "dyker ner" och inte är rädd för att googla. Företrädelsevis bör det i mina ögon vara saker som man faktiskt använder själv, i någon mån — Project Euler går sällan in under den kategorin, vilket gör att man ofta skriver program som man sällan återvänder till, och kanske frångår "best practices" och läsbarhet av kod (vilket egentligen är det viktigaste att lära sig för mjukvarudesign och att utvecklas i språket) till förmån för prestanda och få rader. Project Euler är snarare något man kan använda för att lära sig om generell datavetenskap och matematik än om praktisk programdesign.

Några enkla programidéer:

  • "Glosfrågesporter" där man skriver in en lista som slumpar fram frågor till en terminal (jag minns att jag skrev ett för att plugga in sommar-OS-städer som ett vad ).

  • Parsa en viss hemsida och presentera information (parsa med reguljära uttryck om man vill ha det jobbigt, eller med BeautifulSoup om man vill se en ytterst trevlig modul som uppvisar många styrkor hos Python).

  • Logganalyserare, som exempelvis tar en IRC-logg och presenterar en lista över vilka som skickat flest inlägg, medellängd på meddelanden, etc.

  • Fördrinkberäknare som tar antal personer och exempelvis önskad alkoholmängd per person och ger en inköpslista och presenterar det på ett fint sätt.

Ovanstående projekt är som sagt väldigt enkla på många sätt, men de är ändå lärorika om man har viljan att utvecklas och hela tiden lista ut hur man gör saker på bästa sätt. När man skrivit ett sådant enkelt program så bör man gå tillbaka i framtiden och titta på det igen för att uppdatera det efter vad man lärt sig sedan senast, och se vad man gjorde på mindre bra sätt tidigare. Om det är program som man faktiskt använder till något så är chansen mycket större att man faktiskt utvecklar och utvecklas av dessa program.

Enkla programidéer går också ofta att bygga ut med lite kreativitet som brukar uppstå när man pillar med dem. Webparsningsprogrammet kanske kan logga ens inläggantal på SweClockers varje natt och lagra detta i en databas som sedan kan presentera statistik över hur många man skrivit en viss månad, eller lagra en datapunkt med tid för varje inlägg och visa när på dygnet man är mest aktiv.

Ett annat mindre projekt jag kom att tänka på är att jag skrev ett program för att skapa en personlig RSS-feed från en viss webcomic som saknade en sådan. Det körs fortfarande varje midnatt på min dator, sparar ned bilden i en lokal cache och genererar en lokal RSS-feed som bäddar in denna bild som min RSS-läsare lyssnar på. Ett enkelt program, men innehåller ändå i sitt nuvarande tillstånd saker som hämtning av webbresurser, lokal I/O, att använda externa RSS-moduler, etc. Dessutom är det lärorikt att se till att skriva det ordentligt och läsbart, med docstrings, följa PEP-8, sköta det med ordentlig versionshantering (exempelvis Mercurial är ju i sig skrivet i Python), kanske generalisera det genom att läsa data från en extern konfigurationsfil så att det kan stöda flera serier, etc. Som sagt: låt kreativiteten flöda . Att känna att man kan få en idé och faktiskt genomföra den är en av de bästa uppmuntringarna som finns till att fortsätta programmera — det ska vara roligt och i längden belönande.

Att direkt börja med större program har nackdelen att man kanske inte lägger lika mycket tid på detaljer som man kan göra i mindre program. Har man väl grunden vad gäller att intuitivt kunna välja rätt datastrukturer (en enorm del av all programmering), strukturera programmet i funktioner/klasser/metoder och välja rätt paradigm där den passar bäst, vara bekväm med versionshantering och sin editor där man kanske bakar in statisk kodanalys och debuggning, osv, så är det sedan mycket enklare att börja med ett större projekt. Därifrån kan man lära sig att skriva egna moduler, enhetstester, fortsätta lära sig nya bibliotek och bli bättre och bättre på att skriva läs- och hållbar kod.

Ja det är just det där med att sätta sig och skriva lite egna program som jag är ute efter men är som sagt dålig på att komma på något. Jag är ju så indoktrinerad med Matlabs begränsningar och Matlabs tankesätt. Var lite irriterad när jag var tvungen att skriva loop efter loop för att lösa sånt som Matlab kör med enkla vektoroperationer på en kort rad.

Google använder jag alltid flitigt när jag gör saker.

Hade hoppas på att hitta en sida med lite roliga små program med stegrande svårighetsgrad. Kanske ska se om jag kan börja med att plocka statistik från Sweclockers.

Visa signatur

Q9450, HD4850, 8 GB DDR2 800 MHz, 3x750 GB, Antec 300, Dell 2408WFP, U2410, Qnap TS-419p+ 4x2 TB Samsung F4, Asus UL30A-QX056V, Logitech Z-680, Sennheiser HD380pro, M-Audio FastTrack Pro, Ibanez sa160qm, Ibanez TB 15R, Zoom 505II, Ibanez GSR 200, Ibanez SW 35, Cort AC-15, Squier SD-3 BBL, Yamaha PSR 270, Røde NT1-A, Nikon D200, Nikkor 18-70/3,5-4,5, 70-300VR, 50/1,8, 28/2,8, Tamron 17-50/2,8, 90/2,8, Sigma 30/1,4, SB-800, SB-25, SB-24

Permalänk
Hedersmedlem
Skrivet av Zotamedu:

Ja det är just det där med att sätta sig och skriva lite egna program som jag är ute efter men är som sagt dålig på att komma på något. Jag är ju så indoktrinerad med Matlabs begränsningar och Matlabs tankesätt. Var lite irriterad när jag var tvungen att skriva loop efter loop för att lösa sånt som Matlab kör med enkla vektoroperationer på en kort rad.

Ja, analogt så när jag började använda Matlab så skrev jag jobbiga C-liknande `for`-loopar över index och annat, innan polletten trillade ner gällande vektoroperationer. På samma sätt så skrev jag C-likt i Python, innan jag tidigt upptäckte `for … in …`-syntaxen, och senare hur det kunde samspela med generatorer när man skrev egna klasser och andra tricks. Efter ytterligare ett tag så upptäckte jag hur `map()`/`reduce()`/`filter()`, och sedan (ofta än bättre) list comprehensions (och liknande för dictionaries, sets, …) kan lösa extremt mycket utan att behöva skriva speciellt många loopar alls, om man strukturerar sina funktioner och datatyper på ett bra sätt.

Sådant är typiskt saker som är svåra att få riktigt grepp om när man läser om koncepten i guider och annat, precis på samma sätt som det tog ett tag innan jag förstod Matlabs tillvägagångssätt, men när man sitter och strider med programskrivande så kommer det någon gång plinga till i huvudet: "aha, här återuppfinner jag ju egentligen bara det där hjulet jag läste om någon gång", och så rullar det på.

När man sedan upptäckt dessa delar så är det säkert en period då man överanvänder koncepten, innan man med än mer övning upptäcker en bättre balans, så att man använder alla delar av språket på de sätt de är tänkta.

Python nämns ofta som ett bra språk att starta med för att syntaxen är enkel, men det finns i mina ögon fler anledningar:

  • Språkets design premierar hela tiden att skriva läsbar och enkel kod framför att skriva "smarta lösningar" som ingen (inklusive en själv om en vecka) kan få grepp om framöver. Att lära sig skriva "enkelt" så att alla logiska steg är tydligt synliga är bra för inlärning.

  • Man blir belönad av att lära sig tänka på skillnaderna mellan de olika datastrukturer som erbjuds och när de ska användas, samtidigt som de inte är bedövande många. Att lära sig tänka i termer om datastrukturer är något som ärrade dataloger brukar tala om med drömska blickar.

  • Jag fick aldrig något riktigt grepp om objektorientering när jag introducerades till det genom Java, då fördelarna lätt doldes i laviner av syntax för enklare uppgifter. Jag hade sedan ytterligare en utflykt i detta med relativt färska PHP 5, men det var rätt hemskt. Det var inte förrän jag senare började skriva Python som allt plötsligt blev så mycket tydligare och fördelarna kom fram i ljuset, vilket jag sedan kunde ta med mig tillbaka till Java, C++, PHP, etc.

Skriver man `import this` i en Pythontolk så får man visdomsord av Tim Peters (får man en välanvänd sorteringsalgoritm uppkallad efter sig så räknas man som insatt ) som är roliga att läsa under tiden man lär sig mer, då de växer ju mer man förstår om språket.

Skrivet av Zotamedu:

Hade hoppas på att hitta en sida med lite roliga små program med stegrande svårighetsgrad. Kanske ska se om jag kan börja med att plocka statistik från Sweclockers.

För mig personligen så har de flesta ordentliga svallvågor av inlärning kommit när jag skrivit program som har haft någon faktiskt applikation. Det är med sådant som jag verkligen har kunnat fastna framför datorn i frenetiska sessioner, samtidigt som man glömmer bort att sova och äta och sådant världsligt .

Stack Overflow har en tråd i en liknande anda som denna: Python progression path — From apprentice to guru. En annan lärorik sak man kan göra är att ordna Stack Overflows Pythontaggade frågor efter röstantal och börja läsa. Vissa saker är säkerligen helt ointressanta till en början ("metaklasser" är exempelvis något som de allra flesta aldrig kommer stöta på), men man kan säkert hitta någon intressant fråga som man lär sig något av och framöver komma tillbaka till de trådar som är oförståeliga för tillfället när man behöver dem.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Entusiast
Skrivet av phz:

Ja, analogt så när jag började använda Matlab så skrev jag jobbiga C-liknande `for`-loopar över index och annat, innan polletten trillade ner gällande vektoroperationer. På samma sätt så skrev jag C-likt i Python, innan jag tidigt upptäckte `for … in …`-syntaxen, och senare hur det kunde samspela med generatorer när man skrev egna klasser och andra tricks. Efter ytterligare ett tag så upptäckte jag hur `map()`/`reduce()`/`filter()`, och sedan (ofta än bättre) list comprehensions (och liknande för dictionaries, sets, …) kan lösa extremt mycket utan att behöva skriva speciellt många loopar alls, om man strukturerar sina funktioner och datatyper på ett bra sätt.

Sådant är typiskt saker som är svåra att få riktigt grepp om när man läser om koncepten i guider och annat, precis på samma sätt som det tog ett tag innan jag förstod Matlabs tillvägagångssätt, men när man sitter och strider med programskrivande så kommer det någon gång plinga till i huvudet: "aha, här återuppfinner jag ju egentligen bara det där hjulet jag läste om någon gång", och så rullar det på.

När man sedan upptäckt dessa delar så är det säkert en period då man överanvänder koncepten, innan man med än mer övning upptäcker en bättre balans, så att man använder alla delar av språket på de sätt de är tänkta.

Python nämns ofta som ett bra språk att starta med för att syntaxen är enkel, men det finns i mina ögon fler anledningar:

  • Språkets design premierar hela tiden att skriva läsbar och enkel kod framför att skriva "smarta lösningar" som ingen (inklusive en själv om en vecka) kan få grepp om framöver. Att lära sig skriva "enkelt" så att alla logiska steg är tydligt synliga är bra för inlärning.

  • Man blir belönad av att lära sig tänka på skillnaderna mellan de olika datastrukturer som erbjuds och när de ska användas, samtidigt som de inte är bedövande många. Att lära sig tänka i termer om datastrukturer är något som ärrade dataloger brukar tala om med drömska blickar.

  • Jag fick aldrig något riktigt grepp om objektorientering när jag introducerades till det genom Java, då fördelarna lätt doldes i laviner av syntax för enklare uppgifter. Jag hade sedan ytterligare en utflykt i detta med relativt färska PHP 5, men det var rätt hemskt. Det var inte förrän jag senare började skriva Python som allt plötsligt blev så mycket tydligare och fördelarna kom fram i ljuset, vilket jag sedan kunde ta med mig tillbaka till Java, C++, PHP, etc.

Skriver man `import this` i en Pythontolk så får man visdomsord av Tim Peters (får man en välanvänd sorteringsalgoritm uppkallad efter sig så räknas man som insatt ) som är roliga att läsa under tiden man lär sig mer, då de växer ju mer man förstår om språket.

För mig personligen så har de flesta ordentliga svallvågor av inlärning kommit när jag skrivit program som har haft någon faktiskt applikation. Det är med sådant som jag verkligen har kunnat fastna framför datorn i frenetiska sessioner, samtidigt som man glömmer bort att sova och äta och sådant världsligt .

Stack Overflow har en tråd i en liknande anda som denna: Python progression path — From apprentice to guru. En annan lärorik sak man kan göra är att ordna Stack Overflows Pythontaggade frågor efter röstantal och börja läsa. Vissa saker är säkerligen helt ointressanta till en början ("metaklasser" är exempelvis något som de allra flesta aldrig kommer stöta på), men man kan säkert hitta någon intressant fråga som man lär sig något av och framöver komma tillbaka till de trådar som är oförståeliga för tillfället när man behöver dem.

Jo jag förstår verkligen varför folk gillar Python. for this in that är logiskt och lättläst. Delar av det man skriver blir ju nästan klarspråk. Bara en sådan sak som print("Hello World") mot System.out.println("Hello World"); känns ju mycket mer logisk. Då är inte public static void main med heller. Tycker också om att slippa deklarera alla variabler och dess typ hela tiden. Var ett stort irritationsmoment när jag satt med javalabbarna. Fick också lite av en aha-upplevelse när det gällde klasser. Just den biten var Codecademy bra på. De förklarade klasser och hur klasser kan ärva egenskaper. Gäller bara att lära sig tänka i klasser för efter alla år med Matlab har jag lärt mig att tänka i funktioner. Fast grundkonceptet hur man använder klasser i Python och funktioner i Matlab känns ju rätt lika. Gäller bara att lära sig att klasser är mer flexibla.

Ska ta och kolla igenom den där tråden på Stack Overflow. Brukar gå att hitta massa vettig information.

Har du några förslag på bra miljö att skriva i? Försökte få Eclipse att samarbeta men misslyckades vilket påminde mig om att det är så det brukar sluta när jag försöker installera Eclipse. Nu har jag våldat in en halvsnygg lösning i Notepad++ som fungerar men jag är inte helt nöjd med den. Egentligen vill jag mest ha en enkel och smidig miljö med syntax highlight där jag snabbt och smidigt kan köra koden och se resultatet direkt. Hade inte haft något emot att ha ett fönster för kod och en konsol uppe samtidigt.

Visa signatur

Q9450, HD4850, 8 GB DDR2 800 MHz, 3x750 GB, Antec 300, Dell 2408WFP, U2410, Qnap TS-419p+ 4x2 TB Samsung F4, Asus UL30A-QX056V, Logitech Z-680, Sennheiser HD380pro, M-Audio FastTrack Pro, Ibanez sa160qm, Ibanez TB 15R, Zoom 505II, Ibanez GSR 200, Ibanez SW 35, Cort AC-15, Squier SD-3 BBL, Yamaha PSR 270, Røde NT1-A, Nikon D200, Nikkor 18-70/3,5-4,5, 70-300VR, 50/1,8, 28/2,8, Tamron 17-50/2,8, 90/2,8, Sigma 30/1,4, SB-800, SB-25, SB-24

Permalänk
Datavetare
Skrivet av phz:

Jag fick aldrig något riktigt grepp om objektorientering när jag introducerades till det genom Java, då fördelarna lätt doldes i laviner av syntax för enklare uppgifter. Jag hade sedan ytterligare en utflykt i detta med relativt färska PHP 5, men det var rätt hemskt. Det var inte förrän jag senare började skriva Python som allt plötsligt blev så mycket tydligare och fördelarna kom fram i ljuset, vilket jag sedan kunde ta med mig tillbaka till Java, C++, PHP, etc.

Frågan man definitivt bör ställa sig i eran med multicore CPUer är: borde man verkligen använda OOP???

För att citera en av de absolut största inom datorvetenskap, Edsger W. Dijkstra, han gliring är mot Java

Citat:

Object-oriented programming is an exceptionally bad idea which could only have originated in California

Varför OOP och multicore-programming är en så dålig match illustreras bäst av Erlangs fader, Joe Armstrong

Citat:

The problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.

Det sagt, Pythons OOP stöd är ju inte speciellt bra (bättre i t.ex. Ruby) men det trevliga med Python är att man inte på något sätt är tvingad att använda OOP.

Skrivet av Zotamedu:

Har du några förslag på bra miljö att skriva i? Försökte få Eclipse att samarbeta men misslyckades vilket påminde mig om att det är så det brukar sluta när jag försöker installera Eclipse. Nu har jag våldat in en halvsnygg lösning i Notepad++ som fungerar men jag är inte helt nöjd med den. Egentligen vill jag mest ha en enkel och smidig miljö med syntax highlight där jag snabbt och smidigt kan köra koden och se resultatet direkt. Hade inte haft något emot att ha ett fönster för kod och en konsol uppe samtidigt.

Vad det gäller utvecklingsmiljö för Python så använder jag Emacs, där finns stöd för syntax-highlight, debugger etc. Har testat några Python IDE:er, men tycker ingen kommer nära Emacs. Har skrivit många tiotusentals rader Python på jobbet och aldrig känt att Emacs inte har de funktioner jag vill ha. Å andra sidan använder jag Emacs till alla programspråk utom C# (där jag använder VS) och Android (skriver "vanlig" Java i Emacs, men för Android så känns Eclipe bättre). Finns en rad guider till vad man kan göra med Emacs som Python IDE, t.ex. denna eller denna.

Visa signatur

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

Permalänk
Entusiast
Skrivet av Yoshman:

Vad det gäller utvecklingsmiljö för Python så använder jag Emacs, där finns stöd för syntax-highlight, debugger etc. Har testat några Python IDE:er, men tycker ingen kommer nära Emacs. Har skrivit många tiotusentals rader Python på jobbet och aldrig känt att Emacs inte har de funktioner jag vill ha. Å andra sidan använder jag Emacs till alla programspråk utom C# (där jag använder VS) och Android (skriver "vanlig" Java i Emacs, men för Android så känns Eclipe bättre). Finns en rad guider till vad man kan göra med Emacs som Python IDE, t.ex. denna eller denna.

Misstänkte att någon skulle föreslå Emacs. Det är lite pilligt i Windows. Lätt att installera men kräver en del handpåläggning för att det ska fungera naturligt. vanlig copy paste är ju inte standard och så vidare. Testade de där guiderna och de verkar vara låsta till Linux. Såg så smidigt ut att bara plocka hem några filer och köra ett skript men det verkar inte fungera i Cygwin. Får bara massa fel och lyckas inte kopiera filerna manuellt.

Visa signatur

Q9450, HD4850, 8 GB DDR2 800 MHz, 3x750 GB, Antec 300, Dell 2408WFP, U2410, Qnap TS-419p+ 4x2 TB Samsung F4, Asus UL30A-QX056V, Logitech Z-680, Sennheiser HD380pro, M-Audio FastTrack Pro, Ibanez sa160qm, Ibanez TB 15R, Zoom 505II, Ibanez GSR 200, Ibanez SW 35, Cort AC-15, Squier SD-3 BBL, Yamaha PSR 270, Røde NT1-A, Nikon D200, Nikkor 18-70/3,5-4,5, 70-300VR, 50/1,8, 28/2,8, Tamron 17-50/2,8, 90/2,8, Sigma 30/1,4, SB-800, SB-25, SB-24

Permalänk
Medlem
Skrivet av Zotamedu:

Jag är ju så indoktrinerad med Matlabs begränsningar och Matlabs tankesätt. Var lite irriterad när jag var tvungen att skriva loop efter loop för att lösa sånt som Matlab kör med enkla vektoroperationer på en kort rad.

Vad menar du med Matlabs begränsningar. Matlab är ju rätt fritt och du använder det som ett programmeringsspråk och inte ett scriptspråk som de flesta verkar göra.

Anyhow, hitta på lite roliga saker att göra, det mesta går ju att göra i alla språk. Kanske är det ett textbaserat spel? Någon rolig konvertera funktion till graf eller liknande? Handlar ju bara om att hitta på något som verkar intressant.

Permalänk
Medlem
Skrivet av Zotamedu:

Misstänkte att någon skulle föreslå Emacs. Det är lite pilligt i Windows. Lätt att installera men kräver en del handpåläggning för att det ska fungera naturligt. vanlig copy paste är ju inte standard och så vidare. Testade de där guiderna och de verkar vara låsta till Linux. Såg så smidigt ut att bara plocka hem några filer och köra ett skript men det verkar inte fungera i Cygwin. Får bara massa fel och lyckas inte kopiera filerna manuellt.

Hittade Python Tools for Visual Studio för ett tag sedan. Har inte använt det så mycket än dock, men det verkar fungera.

Visa signatur

.<

Permalänk
Hedersmedlem
Skrivet av Yoshman:

Frågan man definitivt bör ställa sig i eran med multicore CPUer är: borde man verkligen använda OOP???

För att citera en av de absolut största inom datorvetenskap, Edsger W. Dijkstra, han gliring är mot Java

Citat:

Object-oriented programming is an exceptionally bad idea which could only have originated in California

Varför OOP och multicore-programming är en så dålig match illustreras bäst av Erlangs fader, Joe Armstrong

Citat:

The problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.

Det sagt, Pythons OOP stöd är ju inte speciellt bra (bättre i t.ex. Ruby) men det trevliga med Python är att man inte på något sätt är tvingad att använda OOP.

Att blanda in multicoreprocessorer och annat är att titta på det ur ett prestandaperspektiv. Det är inte därför jag använder OOP (där det passar), utan det används där det helt enkelt förenklar kodningsprocessen; snarare som ett arkitekturverktyg.

Jag hade skrivit småsaker i Python i flera år innan jag ens skrev `class` för första gången, så det är definitivt inte något som är fastbultat i fundamentet på samma sätt som i exempelvis Java, men samtidigt så känns det som en extremt naturlig del av språket om man väljer att inkorporera det.

Jämförelser mellan Ruby och Python hamnar oftast i personliga preferenser, inte minst beroende på inom vilket område man behöver använda språket. Författaren till Ruby har sagt att han skapade Ruby 1993 med tanken om att göra en "mer objektorienterad variant av Python", men Python har utvecklats en hel del sedan 1993. Vissa av de argument som syns i liknande diskussioner är i mina ögon ganska ytliga, som att man definierar längden av ett Rubyobjekt som en fundamental egenskap, medans man i Python definierar en `__len__`-metod för klassen och sedan använder ett funktionsanrop på objektet. I praktiken blir detta snarare bara en syntaxegenskap hos språket än en fundamental skillnad (inget hindrar en från att definiera en `length`-egenskap i Python som gör samma sak, men då skriver man egentligen inte "Python"). Python skippar ju dock (mer eller mindre, går emulera som `properties` om man verkligen vill, eller undgå problemet genom att följa "frivilliga" namngivningskonventioner) hela biten med inkapsling, vilket många ser som en grundbult i OOP, så det är inte en helt traditionell applikation av konceptet.

Jag har inte skrivit en rad Ruby själv utan bara sett andras kod, så ovanstående synpunkter bör inte tolkas alltför tungt. Vilka begränsningar man hittar inom Python beror också på vad man gör för något. Jag har skrivit små skriptliknande projekt för kraftigt skiftade saker, enklare webbtjänster och en saker för att analysera fysikalisk mätdata. Just inom det senare området så är Python numera något av ett standardspråk som används tills prestandabegränsningar börjar bli påminda, då man kan migrera dessa bitar till andra språk (oftare och oftare C++, men även Fortran är vanligt).

För ett nuvarande projekt så har jag en C++-bas som kör tyngre beräkningar på stora mätdatamängder och presenterar resultatet i en utgallrad och färdigkalibrerad datastruktur, varpå Pythonskript sedan tar hand om att plotta dataserier via kopplingar till ett underliggande C++-bibliotek. Tanken är att C++-biten blir av "write once"-karaktär som kan stå och tugga TB med mätdata i timmar/dagar för att spotta ut någon GB med intressanta data till disk, och att den mesta manuella programmeringstiden tillbringas med att skapa kortare Pythonskript som kan ta datastrukturen från C++ och exempelvis grafiskt presentera och exportera olika dataserier.

Kollar jag i Pythonkoden för projektet (för närvarande ~1500 rader) så har jag bara skrivit en klass på ~70 rader (för att läsa in en viss inställningsfil för en detektor och presentera några beräkningar av dess värden), och ingen alls på ~500 rader C++, men båda delar jobbar mot större existerande C++-kodbaser som presenterar egentligen allt via klasser. Vem som helst som argumenterar för att OOP (eller någon annan paradigm) är en "silver bullet" skulle jag personligen tycka är vilse. På samma sätt är Dijkstras (påstådda) och Armstrongs lösryckta citat på egna ben rätt bananas om de försöker förkasta hela OOP-världen, men det är troligen inte så trubbigt de är tänkta att tolkas. I praktiska problem så verkar det inte vara några problem att låta olika paradigmer samexistera och sköta det de gör bäst — och då är det ju praktiskt att Python låter användaren välja .

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Hedersmedlem
Skrivet av Zotamedu:

Har du några förslag på bra miljö att skriva i? Försökte få Eclipse att samarbeta men misslyckades vilket påminde mig om att det är så det brukar sluta när jag försöker installera Eclipse. Nu har jag våldat in en halvsnygg lösning i Notepad++ som fungerar men jag är inte helt nöjd med den. Egentligen vill jag mest ha en enkel och smidig miljö med syntax highlight där jag snabbt och smidigt kan köra koden och se resultatet direkt. Hade inte haft något emot att ha ett fönster för kod och en konsol uppe samtidigt.

Personligen skriver jag i Vim med ett fåtal fräsiga plugins (Syntastic kan få ett hedersomnämnande; har även (svagt) överlapp med instruktionerna i [1]) och startar gärna detta i en Tmux-session så att jag kan ha (minst! ) en tillhörande terminal ständigt tillgänglig i ett splittat fönster för att sköta testkörningar, filhantering, versionshantering, etc. När man är klar för stunden så kan man sedan bara detacha sessionen, och öppna den igen när man kommer tillbaka, eller för den delen attacha från en annan dator och fortsätta. Ibland har jag riggat så att terminalen automatiskt kör programmet varje gång jag sparar filen i Vim, vilket kan vara smidigt, men det passar inte alltid.

Att få igång Tmux och terminaler på Windows är nog mer jobb än det är värt, så där är det nog bättre att sikta på någon "färdig" lösning. PyCharm är rätt poppis, men en lite större best. PyScripter är nog mer avskalad. Att satsa på Vim/Emacs/annan kompetent allmän texteditor gör ju dock att man lär sig mer generella färdigheter som man kan ha nytta av även i andra sammanhang.

Mer "uttrycksfulla" språk som Java, där det lätt blir mycket "boilerplate"-kod närapå kräver en större IDE för allt bortom skoluppgifter (minns att jag använde Jgrasp för den Javakurs jag läst, utan att använda speciellt många funktioner utöver den integrerade "kompilera och kör"-panelen), men i Pythonvärlden är det många [citation needed] som känner att en rätt avskalad upplevelse räcker väldigt långt, och i sig kommer med fördelar. What IDE to use for Python? — Stack Overflow till "räddning" igen, med en sorts popularitetsomröstning, där Vim "leder". Jag har i ärlighetens namn inte använt något annat än Vim för att skriva Python, så jag är nog inte rätt person att uttala mig om alternativen.

[1]: Turning Vim into a modern Python IDE

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Datavetare
Skrivet av Zotamedu:

Misstänkte att någon skulle föreslå Emacs. Det är lite pilligt i Windows. Lätt att installera men kräver en del handpåläggning för att det ska fungera naturligt. vanlig copy paste är ju inte standard och så vidare. Testade de där guiderna och de verkar vara låsta till Linux. Såg så smidigt ut att bara plocka hem några filer och köra ett skript men det verkar inte fungera i Cygwin. Får bara massa fel och lyckas inte kopiera filerna manuellt.

Cut-and-paste integration med Windows-clipboard finns som standardfunktion, förutsatt att man kör win32 versionen av Emacs och inte den i CygWin. Googla på "clipboard-kill-region/clipboard-kill-ring-save/clipboard-yank", använd "C-h b" för att se vilken tangent dessa funktioner är bundna till. Går att binda dem till C-x/C-c/C-v för att få "Windows beteende", (ctrl x, ctrl c och ctrl v) men är man van med Emacs är det rätt irriterande att ändra ctrl-c till att vara copy-to-clipboard...

Har inte testat guiderna på annat än OSX och Linux, kör i.o.f.s. Windows på hemdatorn idag men programmerandet sker via en Linux-installation körandes på VirtualBox. Ska titta lite på dessa, då Emacs extensioner typiskt är skrivna i elisp så ska de fungera oavsett plattform.

Annars har jag hört mycket gott om Sublime Text, är kanske enklare att komma igång med om man inte använt Emacs tidigare.

Visa signatur

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

Permalänk
Datavetare
Skrivet av phz:

Att blanda in multicoreprocessorer och annat är att titta på det ur ett prestandaperspektiv. Det är inte därför jag använder OOP (där det passar), utan det används där det helt enkelt förenklar kodningsprocessen; snarare som ett arkitekturverktyg.

Man behöver inte ens blanda in prestanda i det hela, inte heller multicore för att OOP ska vara en dålig idé. Så fort du använder dig av "concurrent programming" eller på något sätt har flera trådar i ditt program så är OOP en rätt stor bössa riktad mot fötterna då "metoder" typiskt modifiera något inkapslat tillstånd och att göra dessa tillståndsförändringar på rätt sätt med flera trådar är dömt att misslyckas.

OOP kräver att du definierar typhierarkier, A is-a B. Problemet att det bara fungerar på tillrättalagda leksaksexempel, det man vill ha är polymorfism men det kräver absolut inte OOP. I Python kan man använda duck-typing för polymorfism så finns ingen anledning att stoppa in en stel klasshierarki, vad ger det mer än att addera boilerplate?

PyCon 2003

Citat:

Object-oriented programming offers a sustainable way to write spaghetti code. It lets you accrete programs as a series of patches.

Visa signatur

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

Permalänk
Entusiast
Skrivet av Yoshman:

Cut-and-paste integration med Windows-clipboard finns som standardfunktion, förutsatt att man kör win32 versionen av Emacs och inte den i CygWin. Googla på "clipboard-kill-region/clipboard-kill-ring-save/clipboard-yank", använd "C-h b" för att se vilken tangent dessa funktioner är bundna till. Går att binda dem till C-x/C-c/C-v för att få "Windows beteende", (ctrl x, ctrl c och ctrl v) men är man van med Emacs är det rätt irriterande att ändra ctrl-c till att vara copy-to-clipboard...

Har inte testat guiderna på annat än OSX och Linux, kör i.o.f.s. Windows på hemdatorn idag men programmerandet sker via en Linux-installation körandes på VirtualBox. Ska titta lite på dessa, då Emacs extensioner typiskt är skrivna i elisp så ska de fungera oavsett plattform.

Annars har jag hört mycket gott om Sublime Text, är kanske enklare att komma igång med om man inte använt Emacs tidigare.

Jag har inget problem med Emacs i sig, jag körde LaTeX i Emacs och har använt det lite för annat också. Problemet är bara att de guiderna inte verkar samarbeta med Windows. Det skript som skulle sköta mycket av konfigureringen går inte att köra under Windows eftersom de inte tycker om .sh. Slängde in Cygwin och den kör skriptet men med en lång rad felmeddelanden. Tror det saknas komponenter som jag inte har en aning om hur man får till. Försökte manuellt flytta över filerna och .emacs till HOME men verkar inte som att Emacs vill läsa av allt ändå. Emacs må vara extremt kraftfullt och mångsidigt men det går inte riktigt att beskylla det för att vara användarvänligt.

Har för mig att det var rätt lätt att få det att samarbeta med MiKTex. Var dock ett tag sedan jag testade för Emacs försvann efter en ominstallation och sen använde jag inte så mycket LaTeX och för det jag skrev dög den inbyggda editor som de då hade börjat skicka med MiKTex.

Visa signatur

Q9450, HD4850, 8 GB DDR2 800 MHz, 3x750 GB, Antec 300, Dell 2408WFP, U2410, Qnap TS-419p+ 4x2 TB Samsung F4, Asus UL30A-QX056V, Logitech Z-680, Sennheiser HD380pro, M-Audio FastTrack Pro, Ibanez sa160qm, Ibanez TB 15R, Zoom 505II, Ibanez GSR 200, Ibanez SW 35, Cort AC-15, Squier SD-3 BBL, Yamaha PSR 270, Røde NT1-A, Nikon D200, Nikkor 18-70/3,5-4,5, 70-300VR, 50/1,8, 28/2,8, Tamron 17-50/2,8, 90/2,8, Sigma 30/1,4, SB-800, SB-25, SB-24

Permalänk
Medlem

http://newcoder.io brukar vara en bra fortsättning från codecademy.

Visa signatur

Intel Core i7 3770K - ASRock Z77 Pro4 - CM Hyper 212 EVO - Asus DirectCU II GTX 670 - 32 GB Corsair Vengeance