Hur är det att jobba som en programmerare?

Permalänk

Hur är det att jobba som en programmerare?

Hej!

Jag är inte en programmerare. Jag är maskiningenjör och är mer lagd åt den "metall-konstruktions-vägen", men jag brukar utveckla mjukvara i Java för att jag anser att Java är det bästa språket när det kommer till stora applikationsutvecklingar och jag anser att C++ är bara för krävande och man löser jobbet bättre med Java, så länge man inte ska jobba med hårdvaran. Men ska man jobba med hårdvara så är C att föredra alla dagar enligt mig då kompilatorer är billigare att utveckla för C programmeringsspråk än C++.

Alltså sammanfattning: Jag ser programmering som en kostnadsfråga. Utveckla i C++, visst, men det tar längre tid då språket är svårare och man behöver hålla koll på mer till skillnad från Java där allt finns färdigt.

Hur som helst. När jag programmerar så tar jag mig alltid hjälp utav Stackexchange och vissa hemsidor eller YouTube där jag kollar efter exempel. Jag tycker personligen att det är ingen bra strategi att titta på hur andra gör och gör likadant själv. Problemet som jag ser med mig själv är att jag kan inte använda mig av Java Docs då jag förstår inte hur man ska använda det.

Vi säger att jag kan grunden i Java och jag ska lägga till en knapp med JavaFX. Vart börjar jag då i Java Docs? Då står jag helt villse. Istället så söker jag på google "add button javaFX" och får fram massvis med exempel att kopiera.

Då är frågan: När ni programmerar, har ni gått denna väg också? Eller hoppade ni direkt till Java Docs eller liknande dokumentation och hårt följde det?

Eller handlar programmering endast att memorera språket och dess speciella funktioner? Precis som vilket mänskligt språk som helst?

Notera att jag jobbar inte som programmerare, men när jag programmerar så vill jag iallafall känna att jag är en seriös programmerare som inte behöver luta sig mot andra källor.

Jag brukar utveckla 3D spel i Java och databasprogram/TableViewJavaFX med JDBC och MySQL. Det är typ min nivå med Java. Jag vet inte om den nivån är godkänd för att jobba som programmerare dock, men jag har användning utav Java.

Permalänk
Medlem

Finns en bok om detta ämne, har även samma klistermärke på mina laptops.

https://www.goodreads.com/book/show/29437996-copying-and-past...

kort svar: ja det är vanligt ock ok att kolla på hur andra gör, återuppfinn inte hjulet.

längre svar: att lära sig språket är nästan alltid via att kolla tutorials, se hur andra gör och kopiera. när man börjar förstå hur saker funkar och hänger ihop, men framför allt vad som inte går. det är då¨man börjar kunna använda sig av java-doc tex då man måste gå djupare ner för att få fram det man önskar.

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Skrivet av Haptic:

Finns en bok om detta ämne, har även samma klistermärke på mina laptops.

https://www.goodreads.com/book/show/29437996-copying-and-past...

kort svar: ja det är vanligt ock ok att kolla på hur andra gör, återuppfinn inte hjulet.

längre svar: att lära sig språket är nästan alltid via att kolla tutorials, se hur andra gör och kopiera. när man börjar förstå hur saker funkar och hänger ihop, men framför allt vad som inte går. det är då¨man börjar kunna använda sig av java-doc tex då man måste gå djupare ner för att få fram det man önskar.

Ok. Så det är vanligt att erfarna programmerare kan "googla" sig fram och titta på hur andra gör och göra likadant? Man måste inte kunna skriva flytande om man ska jobba som programmerare?

Den enda gången jag använder mig utav Java Doc är när jag behöver kolla konstruktörer. Min IDE känner utav alla metoder till klassen så jag behöver egentligen bara skriva några bokstäver innan fulla lösningen skrivs ut utav min IDE.

Men som sagt, vet jag vilken klass jag vill använda, då kan jag använda Java Docs, annars inte.

Permalänk
Medlem

Jag tar kanske en aningen hårdare ställning än swehunter2000 och säger att om man som programmerar jämt och ständigt sträcker sig efter exempel, då är man nog inte särskilt bra på det man gör. När man först börjar lära sig ett nytt språk/ramverk/bibliotek kan exempel vara guld värt, men man bör så snabbt som möjligt bilda sig en uppfattning kring dess koncept/design-principer. Då kan man istället vända sig till referens-dokumentationen hellre än att googla och hålla tummarna för att någon gjort något liknande som man kan modifiera till sina behov. Kan man å andra sidan bara skriva flytande så kanske det är ett tecken på att man varit fast vid ett ställe lite för längre och bör vidga sina vyer lite.

Konkret för din situation, har du svårt för att använda dokumentationen så beror det nog på att du saknar förståelse för ramverket. Istället för att nöja dig med att klippa och klistra och hoppa vidare till nästa problem, försök förstå varför något görs på ett särskilt vis, och hur allt hänger ihop ur ett större perspektiv.

Visa signatur

"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell

Permalänk
Inaktiv

Tid är pengar. Ser man historisk så kodade många runt år 2000 i vb6 istället för c++ för det gick så mycket snabbare att utveckla, nu idag finns det lite bättre språk än vb6 som C#.

Programmering är ett väldigt brett område och det är svårt att tala generellt. Alla idag använder webben som informationskälla på något sätt och hur beror på vad man jobbar med.

Är det något standardiserat man ska göra så letar man upp exempel
T.ex ska man bearbeta alla användare i Active Directory som tillhör en viss Organizational Unit (OU) så googla https://community.spiceworks.com/how_to/133383-how-to-reset-t...

Ofta får man flera svar, säg att man i Excel ska loppa igenom en range. Googla på det få svar som ser ut som nedan och välj de svar som passar en bäst, ofta får man modda denna:
https://stackoverflow.com/questions/1463236/loop-through-each...

Grundproblemet är att folk idag inte sitter med ett språk, en utvecklingsmiljö. Det skiljer sig lite att koda powershellscript, c#, vba i excel, olika cad program, mikrodatorer, webbsidor med jquery o.s.v, osv.
Man minns då inte syntaxen för precis allt och väldigt mycket har nästan 1000tals personer redan gjort innan och diskuterat deras lösningar på internet.

Mitt råd inom programmering för de som redan har bra utbildningar och jobb är försök att hitta ett närliggande så din kunskap kommer till nytta. T.ex har jag själv programmerat en hel del i olika cadprogram och jag anser att man inom programmering kan komma upp på hög nivå inom detta.
Man kan då göra lösningar som är guld värda och andra har svårt att göra detsamma.
Cadarna kan ej programmering, programmerare förstår ej vad cadare vill ha.

*edit*
Kanske lite korta exempel. Men säg att man snabbt behöver slänga ihop en ftpklient. Hur löser man detta:

1: Man sätter sig in och läser på hur ftp-protokollet fungerar, läser sedan på vad som finns i windows o.s.v

2: Man googlar på ftp client c# och får exempel som denna nedanför och många andra. Där man kan jämföra dem och skapa en som bäst passar ens behov: https://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Cla...

Timkostnaden per timma till kund brukar ligga runt 1000kr/h.
Gissa då vilken arbetsmetod de flesta kunder vill ha för en snabb enkel lösning?

Den bästa lösningen kan i vissa fall vara att använda ett färdigt program eller inbyggda funktioner i windows som dens ftp-klient. Men det är väldigt ofta dessa inte fungerar som man vill.

Permalänk
Medlem

Skulle hävda att duktiga programmerare har många standard algoritmer memoriserade och behöver i mindre utsträckning googla sig till svar. Detta kommer oftast med erfarenhet men även övning på att lösa kodproblem. Du kan kolla in https://open.kattis.com för att träna upp dig själv.

Permalänk
Medlem

google-fu är det inget fel på och finns oerhört många bloggar, m.m där ute. Handlar inte bara om att inte återuppfinna hjulet men även att vara uppdaterad och se om det har kommit nya lösningar till tidigare problem så att man inte sitter memoriserad med ett arbetsätt lämpad för år 2000.

Men i det stora hela beror det på vad för sorts arbetsuppgifter man har, förut var det vanlig med webbutvecklare som knackade ihop statiska hemsidor dag efter dag och för dessa monotona arbetsuppgifter är det lätt att bara upprepa det man redan kan. Medan om du är en ensam utvecklare på ett företag som vill att du skall skapa allt möjligt så lär du behöva googla en del.

Men duktiga programmerare kommer att kunna tolka kod exempel bättre, göra förbättringar och integrera i sina system.

Permalänk
Medlem

Jag skulle säga att steg ett är att veta VAD du ska göra. Om någon kommer till dig med ett problem ska du veta på ett ungefär hur du skulle gå tillväga för att lösa det problemet i någon form av pseudokod. Om du inte vet vad du ska göra blir det i princip omöjligt att lista ut hur du ska göra det också.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem

Jag jobbar som programmerare och googlar saker hela tiden, för precis som har skrivits innan finns det alltid andra som haft samma problem och frågeställningar som en själv. Gör kundadaptioner av mitt företags mjukvara, så beroende på vad jag behöver lösa kan jag också använda funktionalitet från den existerande kodbasen, samt leta information från andra projekt (som kodmässigt är branchade från samma eller tidigare versioner av grundkoden). Därför blir en viktig del i mitt arbete att hitta rätt information.

Visa signatur

Redbox: Asrock B650 Lightning ATX, 7800x3D -20CCO, XFX 6950XT, 2x32GB Corsair Vengence 6400 CL32, WD SN770 2TB, Corsair RMe 1000, Lian Li Lancool 216, Peerless Assassin 120 SE
Purpbox: Z87-Pro, I5 4670K@4.2, Sapphire 290 TRI-X, 2x8GB Crucial Tactical@stock, Deep Silence 1
Samsung Evo 250+500GB + QVO 1TB, 2x1TB 7200RPM backup/lagring
Det var bättre förr: E5300 2600MHz -> 3640MHz, Celeron 300A -> 450MHz

Permalänk

Nu tar vi ett exempel.

Jag sitter här med Java (Bästa språket ) och ska integrera en kombinationsbox i en cell hos en tabellvisare (TableView). Jag hatar engelska så jag försöker hålla mig till så mycket Svenska som möjligt då jag anser att Svenska bör stavas med stort S och Svenska låter per professionellt jämfört med engelskan som är in princip förenklad.

Så det första jag gör är att jag söker upp dokumentationen för JavaFX 10.
https://docs.oracle.com/javase/10/docs/api/overview-summary.h...

Jag vet att jag ska börja på javafx och sedan gå till scene för det är just ett fönster och sedan till tableview.

Men scene finns inte på första sidan så jag är förvirrad nu. Hur ska jag tänka?

Edit:

Tydligen så fanns scene hos java 8, men jag kör Java 10.
https://docs.oracle.com/javase/8/javafx/api/toc.htm

Hittar ändå inget.

Permalänk
Medlem
Skrivet av heretic16:

Nu tar vi ett exempel.

Jag sitter här med Java (Bästa språket ) och ska integrera en kombinationsbox i en cell hos en tabellvisare (TableView). Jag hatar engelska så jag försöker hålla mig till så mycket Svenska som möjligt då jag anser att Svenska bör stavas med stort S och Svenska låter per professionellt jämfört med engelskan som är in princip förenklad.

Så det första jag gör är att jag söker upp dokumentationen för JavaFX 10.
https://docs.oracle.com/javase/10/docs/api/overview-summary.h...

Jag vet att jag ska börja på javafx och sedan gå till scene för det är just ett fönster och sedan till tableview.

Men scene finns inte på första sidan så jag är förvirrad nu. Hur ska jag tänka?

Edit:

Tydligen så fanns scene hos java 8, men jag kör Java 10.
https://docs.oracle.com/javase/8/javafx/api/toc.htm

Hittar ändå inget.

Citat:

javafx.graphics
Defines the core scenegraph APIs for the JavaFX UI toolkit (such as layout containers, application lifecycle, shapes, transformations, canvas, input, painting, image handling, and effects), as well as APIs for animation, css, concurrency, geometry, printing, and windowing.

Ovanstående leder mig till att jag borde leta under javafx.graphics för att hitta sådant som rör t.ex. Scene.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk

Att arbeta som programmerare betyder att man behöver veta vad man ska göra och hur man kan göra det. Det innebär en hel del läsande, frågande och sökande efter information. Det spelar inte så stor roll exakt hur man skaffar informationen om man kan sålla fram den väsentliga när man läser/frågar/söker. Om man har god kunskap om kunden/marknaden och om systemet/kodbasen så går detta fortare och lösningen blir troligen bättre.

Steg 1 är alltid att förstå vad kunden/marknaden behöver. Hur man gör detta varierar kraftigt. Har man en enda kund bör man ha en tät dialog med den. Är det en bredare marknad kanske marknadsundersökningar och/eller beta-tester funkar. Hursomhelst, om man inte vet det så är det ingen mening att börja utveckla/underhålla ett system.

Steg 2 är att förstå hur systemet kan utformas (design), programmeras och testas - oavsett vilket/vilka programspråk som väljs. Om systemet/kodbasen redan finns så gäller det att förstå hur det är utformat, hur det programmerats och testats - oavsett vilket/vilka programspråk som valts. Du har sällan lyxen att ensam välja design och programspråk. Kunskapen om möjligheter och begränsningar i datorer, nätverk, programspråk och program-bibliotek är viktigt att kunna som en grund för design-lösningar och programmering. När du dessutom kan ett programmeringsspråk och dess program-bibliotek riktigt bra så utvecklar du snabbare och bättre.

Saknades ett "hur" i första meningen.
Visa signatur

// Lars Lindehaven

Permalänk
Datavetare

Exempel är lysande till att ge en vink om vilken typ av problem ett bibliotek eller något ramverk har för avsikt att hjälpa dig med. Däremot så skrapar exemplen ofta bara lite på ytan och förutsatt att du inte löser ett problem helt i onödan lär inget exempel beskriva exakt det du behöver.

Så för dagligt jobb har jag det som används väldigt frekvent memorerat (går inte att vara effektiv annars) samt allt annat referarar jag till referensmanualen (normalt enda stället alla finesser finns dokumenterade) alt. läser källkoden till den externa kod jag använder (rätt mycket som tyvärr har usel dokumentation men där koden ändå är så pass bra att det inte finns någon anledning att uppfinna hjulet själv).

Men man måste zooma ut en nivå till. Att kunna detaljerna kring specifika bibliotek är viktigt när man först förstått sin problemdomän och har ett grepp om bästa sätt att ta sig an problemet. Om problemet man försöker lösa är någorlunda komplext blir då kravet här att läsa "papers" (forskningsrapporter) samt litteratur som behandlar långt mer abstrakta koncept (algoritmer och olika högnivåsätt att strukturera program).

Det skrivet: du har helt fel om C++
Det var sant när man jämför C++03 med Java, C++11/14/17 är i praktiken ett nytt språk och man kan nu göra saker rätt mycket som man kan göra det i Java/C#.

Ovanpå det kan man i C++17 väldigt göra saker som inte ens är teknisk möjligt i dagens Java/C#, t.ex. om du har ett data-parallellt problem (t.ex. summera alla tal i en väldigt stor lista). Ett väldigt simpel exempel

// seriell version int sum(std::vector<int> v) { return std::reduce (v.begin(), v.end(), [] (int sum, int n) { return sum + n; }); } // data-parallell version (fyra till >10 gånger snabbare på moderna x86 givet tillräckligt stor längd på v) int sum(std::vector<int> v) { return std::reduce (std::execution::par_unseq, v.begin(), v.end(), [] (int sum, int n) { return sum + n; }); }

Det andra exemplet ser förföriskt enkelt, men det kan faktiskt inte implementeras i Java/C# med mindre än att man gör ändringar på byte-kod nivå vilket skulle paja bakåtkompatibiliteten. Att C++ har ett turingfullständigt språk i form av templates meta-programmering som körs vid kompilering är orsaken till att man lyckats löst det där! (Är väldigt mycket magi bakom kulluserna som man som användare kan ignorera).

Visa signatur

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

Permalänk
Skrivet av noMad17:

Ovanstående leder mig till att jag borde leta under javafx.graphics för att hitta sådant som rör t.ex. Scene.

Hittade combobox och tableview.

https://docs.oracle.com/javase/10/docs/api/javafx/scene/contr...
https://docs.oracle.com/javase/10/docs/api/javafx/scene/contr...
https://docs.oracle.com/javase/10/docs/api/javafx/scene/contr...

Nu gäller det att kombinera dessa.

Permalänk
Skrivet av Yoshman:

Exempel är lysande till att ge en vink om vilken typ av problem ett bibliotek eller något ramverk har för avsikt att hjälpa dig med. Däremot så skrapar exemplen ofta bara lite på ytan och förutsatt att du inte löser ett problem helt i onödan lär inget exempel beskriva exakt det du behöver.

Så för dagligt jobb har jag det som används väldigt frekvent memorerat (går inte att vara effektiv annars) samt allt annat referarar jag till referensmanualen (normalt enda stället alla finesser finns dokumenterade) alt. läser källkoden till den externa kod jag använder (rätt mycket som tyvärr har usel dokumentation men där koden ändå är så pass bra att det inte finns någon anledning att uppfinna hjulet själv).

Men man måste zooma ut en nivå till. Att kunna detaljerna kring specifika bibliotek är viktigt när man först förstått sin problemdomän och har ett grepp om bästa sätt att ta sig an problemet. Om problemet man försöker lösa är någorlunda komplext blir då kravet här att läsa "papers" (forskningsrapporter) samt litteratur som behandlar långt mer abstrakta koncept (algoritmer och olika högnivåsätt att strukturera program).

Det skrivet: du har helt fel om C++
Det var sant när man jämför C++03 med Java, C++11/14/17 är i praktiken ett nytt språk och man kan nu göra saker rätt mycket som man kan göra det i Java/C#.

Ovanpå det kan man i C++17 väldigt göra saker som inte ens är teknisk möjligt i dagens Java/C#, t.ex. om du har ett data-parallellt problem (t.ex. summera alla tal i en väldigt stor lista). Ett väldigt simpel exempel

// seriell version int sum(std::vector<int> v) { return std::reduce (v.begin(), v.end(), [] (int sum, int n) { return sum + n; }); } // data-parallell version (fyra till >10 gånger snabbare på moderna x86 givet tillräckligt stor längd på v) int sum(std::vector<int> v) { return std::reduce (std::execution::par_unseq, v.begin(), v.end(), [] (int sum, int n) { return sum + n; }); }

Det andra exemplet ser förföriskt enkelt, men det kan faktiskt inte implementeras i Java/C# med mindre än att man gör ändringar på byte-kod nivå vilket skulle paja bakåtkompatibiliteten. Att C++ har ett turingfullständigt språk i form av templates meta-programmering som körs vid kompilering är orsaken till att man lyckats löst det där! (Är väldigt mycket magi bakom kulluserna som man som användare kan ignorera).

Jo. Men C++ är jobbigt Det är det som jag ser problemet med C++. Som ovanstående sade "VB6 användes mer än C++ vid år 2000 för tid är pengar". Jag vet vissa stora företag som bygger servrar med VB6 och Perl. Eurocon är ett sådant exempel.

Jag tror säkert att C++ är riktigt bra om man har tidsbegränsat projekt som kräver prestanda och samtidigt objektorientering. Exempelvis fysikmotor för moderna spel.
Annars är jag rätt säker på att i långtidsprojekt (MySQL, Linux osv) så är det nog C som gäller då tid är inte så kostsamt.

Permalänk

Jag löse problemet, igenom att googla och titta på ett exempel.
Dokumentationen gav mig inget, förutom information om vilka parametrar som kan användas.

Känner mig besviken då jag inte vet vad jag vill söka efter om jag ska lösa ett problem.

Permalänk
Medlem
Skrivet av heretic16:

Jag löse problemet, igenom att googla och titta på ett exempel.
Dokumentationen gav mig inget, förutom information om vilka parametrar som kan användas.

Känner mig besviken då jag inte vet vad jag vill söka efter om jag ska lösa ett problem.

Då kan du ju testa att köra lite "reverse-engineering", d.v.s. jämför exemplet med vad som står i dokumentationen och försök förstå den utifrån exemplet.

Du får alltså plocka isär lösningen och titta på varje bit individuellt och försöka förstå hur den fungerar och hur den kan pusslas ihop med övriga bitar. Testa att modifiera utifrån vad som står i dokumentationen och observera hur resultatet förändras osv.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Skrivet av noMad17:

Då kan du ju testa att köra lite "reverse-engineering", d.v.s. jämför exemplet med vad som står i dokumentationen och försök förstå den utifrån exemplet.

Du får alltså plocka isär lösningen och titta på varje bit individuellt och försöka förstå hur den fungerar och hur den kan pusslas ihop med övriga bitar. Testa att modifiera utifrån vad som står i dokumentationen och observera hur resultatet förändras osv.

Jag brukar göra faktiskt det. När jag löste problemet så går jag in i dokumentationen och läser lite om det för att memorera vad som finns mer angående denna funktionalitet.

Om man tar t.ex nu när jag inte hittar en lösning på stackexchange eller google. Att implementera en snurrare (spinnerbox) hos en cell och man kan ej skriva in med tangenten, utan man måste rotera med skrollen på musen.

Ta t.ex. att vi ska skriva in en ålder mellan 0 och 100. Då skrollar jag till t.ex. 80 med musen. Men det är bara om jag har klickat på cellen.

Då vet jag att jag måste ha en lyssnare som lyssnar utav min skrollande mus. Där efter så måste jag implementera ett textfält i cellen.

.setCellFactory(TextFieldTableCell.forTableColumn(vad ska det vara här?)

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/cont...

Här har jag något intressant

Citat:

forTableColumn(StringConverter<T> converter)
Provides a TextField that allows editing of the cell content when the cell is double-clicked, or when TableView.edit(int, javafx.scene.control.TableColumn) is called.

Jag kanske kan säga åt att det går bara skriva heltal. Kanske är bättre än en lyssnare.

Edit:

Nix, löste inte problemet med denna metod.

Istället valde jag denna metod

String age = event.getNewValue().toString(); try { int ageInt = Integer.parseInt(age); } catch (NumberFormatException e) { Alert onlyInts = new Alert(Alert.AlertType.INFORMATION, "Only integers as age", ButtonType.OK); onlyInts.show(); return; }