Företaget ger mig inget val
”Jag hörde att Python är populärt nuförtiden. Ska vi använda Python också?” Kan en ny utvecklare säga något liknande på ett företag? Det är omöjligt.
Innan jag fick ett jobb kunde jag välja vilket språk jag skulle använda. För kodningstestet använde jag Python för att det var fördelaktigt, och för webbutveckling grävde jag ner mig i Java eftersom jag hörde att Java är bra för att få jobb. Men verkligheten för små team som kom in på arbetsmarknaden var annorlunda.
Företagets teknikstack var redan bestämt. Den äldre koden kördes i Java (Spring Boot), skärmarna ritades i JavaScript (Vue.js), och plötsligt hade jag slut på underhåll av Android-appar och fick ta itu med XML och en annan Java.
Jag valde aldrig. Det är bara det att miljön (ramverket) tvingade på mig det språket. Först var jag rädd för att bli bombarderad med detta okända språk och grammatik. Men när jag läste och skrev kod slumpmässigt insåg jag en viktig sak.
”Va? Det här är samma som Java-konceptet du studerade tidigare?”

Gramatiken kan vara annorlunda, men kärnan är densamma (Concept Transfer)
Under min skoltid studerade jag C-språk lätt och grävde ganska djupt in i Java. Sedan, när jobbförberedande säsongen kom, hörde jag i samhället att ”Python är den dåliga killen när det kommer till kodningstester”, så jag öppnade en Python-bok för första gången.
Gramatiken var obekant för mig först, men överraskande nog kunde jag vänja mig vid den på bara några dagar. Det var inte för att Python var lätt. Detta beror på att jag redan kände till ”essensen av programmering” genom Java.
Vad jag gjorde var att inte lära mig ett nytt språk från noll. Uppgiften var att lägga över ett ”ortsnamn som heter Python” på ”Kartan som heter Java” i mitt huvud. Detta kallas ”Transfer of Learning” i pedagogiska termer. Ju djupare du fördjupar dig i ett språk, desto snabbare kan du förstå andra språk.
UI är i slutändan en trädstruktur
Den här upplevelsen lyste också på ett helt annat område. När jag gick i skolan använde jag HTML och CSS för att förnya skolans hemsida för att tjäna fickpengar. Vid den tiden trodde jag aldrig att det skulle hjälpa min utvecklingskarriär.
Men efter att jag gick med i företaget var jag plötsligt tvungen att ändra gränssnittet för Android-appen. Android använder ett märkningsspråk som kallas XML för att konstruera användargränssnittet. Det var första gången jag utvecklade en mobilapp, så jag var väldigt nervös, men jag skrattade när jag tittade på koden.
<!-- Android XML -->
<LinearLayout orientation="vertical">
<TextView text="Hello World" />
<Button text="Click Me" />
</LinearLayout>
<!-- HTML -->
<div style="display: flex; flex-direction: column;">
<span>Hello World</span>
<button>Click Me</button>
</div>
Endast taggnamnet var annorlunda, men strukturen för ”att infoga ett underordnat element i ett överordnat element och forma det med ett attribut” var exakt samma som HTML. Eftersom jag förstår DOM-trädstrukturen och boxmodellen kunde jag snabbt skapa min egen Android-layout.

Framework, de lärde inte ut det i skolan
Det som faktiskt förvirrade mig mer än språket var existensen av ett ”ramverk”.
I skolan lärde man bara ut ”grundläggande fysiska färdigheter” såsom grammatik i C-språk, datastrukturer, algoritmer och språklig teori. Naturligtvis är det inte så att du inte har hört namnen ”Reagera” eller ”Vår”. Efter att ha hört från samhället att ”React är bäst nu för tiden” gick jag till en bokhandel och köpte en React-bok.
Men jag stängde boken innan jag ens läst hälften av den. För jag kunde inte förstå varför koden måste skrivas så här. ”Nej, du kan bara skapa en funktion och anropa den. Varför måste jag ärva Component och lägga in den i render-funktionen? Varför har jag inte kontroll?”
Jag visste inte då. Den avgörande skillnaden mellan ’Bibliotek’ och ’Framework’.
Om det du lärde dig i skolan var att hamra fritt, var den praktiska ramen som en enorm fabrik som tvingade dig att säga, ”Vi ska hamra, så du bara sätter spiken i hålet.” Eftersom jag inte kände till konceptet ”Inversion of Control”, oavsett hur mycket jag läste boken, kändes det som ett främmande språk.
Om du kan språket kan du se ramverket
Men när jag kastades in i praktiskt arbete och tvingade mig själv att använda ramverket, stötte jag på en paradoxal sanning. Oavsett hur komplicerad Spring Boots magi är, så består den i slutändan av ”Java-kod”.
Anteckningar som@Autowired injicerar beroende på magiskt sätt, men om du tittar på det är det i slutändan en tillämpning av Javas reflektionsteknologi. Vue.js responsiva system använder också i slutändan JavaScripts objekt- och egendomsövervakningsfunktioner.
’Om språket (grunden) är starkt är ramverkets (applikationens) funktionsprinciper synliga.’ När jag först började på företaget hoppade jag in utan att veta vad Springs MVC-struktur var, men eftersom jag hade förståelse för Java kunde jag anpassa mig snabbt och tänkte: ”Åh, ramverket kör min kod istället. Jag måste bara kasta objekt enligt dessa regler.”
Om mina ”JavaScript grunder” hade varit starkare när jag läste React-boken, skulle jag ha kunnat förstå varför React blev så.
[Tips] Recept för elever med svårigheter att fatta beslut
”Vilket språk ska jag studera?” Detta är en av de vanligaste frågorna i samhället. Oavsett om det är ett språk eller en ram, behöver du inte nödvändigtvis gräva i bara en sak för resten av ditt liv. Men paradoxalt nog, för att vara bra på flera saker måste du först ”sälja en sak tydligt”.
Om du är student som har svårt att hitta en riktning för dina studier, stäng boken och öppna ”rekryteringssajten” direkt.
”Det här företaget använder Spring, och det företaget använder Node. Vad ska jag göra?” Det spelar ingen roll. Vad det än är så måste du bara lära dig det ordentligt. Som jag sa tidigare, kärnan i programmering är kommunikation. Människor som bemästrat Spring anpassar sig snabbt även om företaget ber dem att använda Node.js efter att ha gått med i företaget. Men alla som har provat lite av det här och det kommer att sluta vandra om igen, oavsett vilken ram som kastas på dem.
När du har tid att tänka, välj en ”färdighet som marknaden (rekryteringsmeddelande) vill ha” och gräv djupt. Det är det snabbaste sättet.
[Kodverifiering] Språken kan vara olika, men minnet är detsamma
Låt oss kontrollera med koden att även om språken är olika så är det som händer inuti datorn i slutändan detsamma. Javas ArrayList och Pythons lista har olika syntax, men metoden för att öka minnet (Dynamic Array) är densamma.
Java:
// Java: nar det ar fullt okas storleken 1.5x och data flyttas.
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
// Internt: skapa array -> lagg till data -> vid platsbrist, skapa storre array och kopiera
Python:
# Python: nar det ar fullt okas storleken ca 1.125x + @ och data flyttas.
my_list = []
my_list.append(1)
# Den interna mekanismen ar nastan identisk med Java (anvander C-sprakets array-omallokering)
Oavsett vilket språk vi använder, förändras inte hur digitala distributionscenter (datorer) fungerar. Detta beror på att reglerna för att använda arbetare (CPU) och lagring (minne) är universella.
Avslutning: nyfikenhet istället för rädsla
När du lever som utvecklare kommer det oundvikligen ett ögonblick då du måste använda språk och ramverk som du inte vill ha. Kommer du att springa iväg varje gång och säga: ”Jag är en Java-utvecklare, så jag gillar inte Python”?
Språket är ett ”verktyg”, inte en religion. Och ramverket är ”workshopen” för att använda verktygen. Människor som har lång erfarenhet av att lära sig ett språk (sitt modersmål) lär sig snabbt hur man använder ett nytt verktyg även om det ges till dem.
Så var inte rädd även om ditt företag tvingar dig att använda en obekant teknikstack just nu. Bara skalet är annorlunda, men substansen inuti är densamma som du redan vet.
Nu när vi har blivit av med rädslan för språk, från nästa artikel, låt oss gå in på djupet av ”Memory”, den verkliga världen där kod lever. När du vet var koden du skrev är lagrad i RAM och hur den körs, kommer språkbarriären att vara lägre.