it-swarm-eu.dev

Každý programovací jazyk lze snadno ovládat, pokud jsou základy programování silné. Skutečnost nebo mýtus?

Je pravda, že člověk s poměrně dobrými základy programování se může snadno naučit jakýkoli programovací jazyk?

Když říkám programovací jazyky, odkazuji na agilní a dynamické jazyky jako PHP, Perl, Ruby atd., Ale ne na dřívější programovací jazyky dávné minulosti.

Do jisté míry jsem pracoval na Java, groovy a flex. Takže vzhledem k tomu, že jsem amatérský programátor, ale rychle se učí, jak je hrubé, jak dlouho bude trvat, než se podepřete v některém z těchto jazyků?

33
Vamsi Emani

Ano, s výhradami.

Před čtyřmi týdny bych řekl, že mám profesionální dovednosti v C a C++, a amatérské dovednosti v Javě. Můj šéf mě požádal, abych v JavaScriptu napsal nějaký software, se kterým jsem měl nulové zkušenosti, a odešel jsem.

Během následujících dvou týdnů jsem četl mnoho ukázkových fragmentů kódu, našel všechny skvělé knihovny a napsal můj program. Je to hotovo a funguje to. Minulý týden jsem si koupil knihu JavaScriptu a četl jsem ji, chlapče, nevěděl jsem, co dělám. Teď chápu, proč moje objekty jednaly tak podivně.

Takže teď říkám, že vím trochu JS. Dokážu to přečíst a pracovat s ním, ale jsem si jist, že to, co píšu, je neefektivní, obtížně čitelné a nedodržuje doporučené postupy.

Obecně platí, že rychlý student může trvat týden a začít vyrábět produkt nízké kvality v novém jazyce. Pokud znáte Javu, můžete docela rychle vyzvednout C, C++, PHP, Python, JavaScript, ale pouze dostatečně dobře na to, abyste mohli upravovat kód nebo psát dobře definované funkce. (Perl může být těžší, protože regexy jsou složité.) Aby bylo možné správně navrhnout systém v novém jazyce, pravděpodobně byste chtěli rok profesionálního rozvoje pod zkušenými mentory.

46
Brad

Odpověď zní: ano ... a ne ... záleží na tom, co máte na mysli základními a zvládnutými snadno .

SKUTEČNOST

  • Znalost základů programování pomůže bez ohledu na jazyk. Zásadami zde mám na mysli věci, které nejsou specifické pro dané paradigma. Věci jako algoritmus, úrovně abstrakce, izolace atd.

  • Dobrá znalost základů daného paradigmatu (OOP, funkcionální atd.) Usnadní učení se jazykům podporujícím stejné paradigma. Dalo by se říci, že dobrá znalost jazyka vám umožní rychle si vyzvednout jazyky stejné rodiny.

  • Se všemi jazyky naučenými ve stejné rodině mi bude další jazyk mnohem jednodušší, nebyl bych překvapen, kdyby tato křivka učení byla exponenciálně rychlejší, jak víte víc.

MÝTUS

  • Při přechodu do nového odlišného paradigmatu nebude jazyk prvního paradigmatu tak užitečný jako naučit se jazyk ve stejné rodině. Ve skutečnosti, v závislosti na rozdílu mezi nimi, se možná budete muset nejprve odnaučit pár věcí, než se budete moci pohnout vpřed a opravdu zaplavit nové paradigma.

--- editoval poslední sekci na základě komentářů ---

Skutečnost...

  • Znalost prvního paradigmatu může vám pomůže naučit se další ...

ale

Mýtus

  • Nenechte se domýšlet, že vás stejně dobře zpomalí nebo vám vůbec nepomůže pro třetí paradigma.
28
Newtopian

pro jakýkoli podobný jazyk, ano

pro jazyky s radikálně odlišnými paradigmy, ne tolik

příklad: znáte C++, chcete se naučit Java, kousek koláče; znáte VB.NET, chcete se naučit Prolog ... celý dort, možná tři nebo čtyři dorty

14
Steven A. Lowe

Věřím, že krátká odpověď zní: „druh pravdivé, ale těžko ověřitelné“. Je velmi obtížné naučit se úzce související API, zvyklosti, idiomy a paradigma (OO, funkční atd.), Než je skutečná syntaxe jazyka. Myslím, že samotný jazyk je snadno ovládnut, pokud máte silné znalosti a zkušenosti s programovacími základy a některé znalosti kompilátoru, ale obtížné je zvládnout kvůli pomocným materiálům.

Jasným příkladem by byl přechod z jednoho jazyka do druhého; C do Java. Syntaxe kódu se velmi podobá programům ve stylu C, ale také je třeba znát api's Java api's (generics, garbage collection atd.)) A nejpravděpodobněji v našem současném „IT prostředí“, některé rámce třetích stran (jaro, jUnit, hibernace atd.), které dělají něco užitečného pro firmy. Takže pokud jste už dříve udělali C, syntaxe jazyka by nebyla problém, je to zbytek.

Přichází to ode mě, kdo zná Javu, C #, Javascript, HTML, CSS, Delphi atd. Nemusím vědět každý koutek o rámcích nebo knihovnách, které používám, ale vím, jak se kolem a rychle se učím kvůli moje zkušenost s používáním jiných z dřívějších. Pro „rychlého studenta“ je to všechno laterální myšlení.

4
Spoike

K základům informatiky, které byste měli vědět, patří nejen matematický základ (teorie množin, logika, teorie grafů, algebra, teorie informací, algoritmická teorie informací atd.), Ale také řada programovacích jazyků, alespoň jeden z každého skupina - tj. jeden imperativ (možná s OOP, ale ten bit není povinný), jeden dychtivý funkční, jeden líný funkční, jeden logický, jeden zřetězený nebo založený na zásobníku.

Díky této základně byste se mohli snadno naučit jakýkoli daný nový jazyk v žádném okamžiku. Pokud některé kousky chybí, můžete skončit s vážným odporem.

Nejlepší způsob, jak se naučit jazyk naruby, je implementace kompilátoru nebo tlumočníka hraček pro jeho významnou podmnožinu (samozřejmě bez standardní knihovny - to je nejsložitější a nej nudnější část jakéhokoli jazyka).

3
SK-logic

Věřím, že zde máme konsenzus, že dobré základy vám do jisté míry pomohou, a já s tím nesouhlasím. Jedním bodem, který z ostatních odpovědí chybí, je však otázka vyzvednutí idiomatů jazyka a já si myslím, že ovládám jazyk, musíte jej psát idiomaticky.

Například můžete psát balíky zcela správných C #, aniž byste pomocí příkazu using automaticky zlikvidovali objekty, ale v dobře psaném idiomatickém C # uvidíte using {...} skvělý obchod. Nevím o žádných žádných jazycích.Net, které mají tento konstrukt (i když vím jen velmi málo dalších a můj Java je dost rezavý, takže bych se mohl mýlit), takže dokonce přichází expert z jiného jazyka, který tuto funkci nemá, se bude muset naučit tento idiom od nuly tak, jak byl.

2
Steve

Je to pravdivé tvrzení pro definici „celkem dobré“ a „snadno“.

Čím lépe rozumíte základům, tím snazší je přechod z jednoho jazyka do druhého. Pokud jste odborník Java programátor, který má solidní znalosti objektově orientovaných jazyků, například základní syntaktické rozdíly mezi Java a C # by měly být relativně snadné zvládnutí za týden nebo dva. Bude trvat déle, než pochopíme, jak se funkčnost ve všech přidružených knihovnách mapuje z jedné na druhou, ale pravděpodobně budete mít slušný popis základních knihoven za měsíc nebo dva. , jde o to zjistit ty případy, kdy standardní přístup k problému v jazyce A nepřekládá přímo standardní přístup v jazyce B (tj. chcete použít LINQ v jazyce C # místo JPA v Javě) a dostat se pohodlně v novém jazyce, o kterém v něm přemýšlíte, spíše než ve starém jazyce a „překládání“. To bude pravděpodobně trvat tři až šest měsíců v závislosti na tom, jak dobře fungují mapy, které obvykle používáte. Java programátor by byl pravděpodobně přiměřeně efektivní) nt a kompetentní vývojář C #. Ale stejně jako s čímkoli jiným, můžete strávit roky učením všech složitých podrobností, ovládáním různých knihoven a doplňků, které nejsou součástí jazyka, ale jsou součástí okolního ekosystému, a obecně se zlepšujete jako vývojář tohoto jazyka.

1
Justin Cave

Řekl bych, že to zcela závisí na nadšení člověka učit se nový jazyk. Když jsou základy silné a pokud dokáže porozumět tomu, jak nový jazyk něco interpretuje, je docela snadné naučit se jakýkoli jazyk.

Nejlepší příklad je moje já. Pracoval jsem s několika jazyky, i když jsem většinu své práce v C # vykonával, ale svou kariéru jsem začal od C a pokračoval v učení C++, Java, VB, PHP, skriptovacích jazyků, Perlu atd. Kdekoli během tohoto období jsem se nikdy necítil, jako bych se nemohl tento jazyk naučit.

1
JPReddy

Zjistil jsem, že nikdy není těžké se naučit nový programovací jazyk, naopak, byla to velká zábava. Přesto existují jazyky, na které jsem se díval, ale nikdy jsem jim nerozuměl, protože jsem nemohl pochopit myšlenku, která za nimi byla, pokud tam byla. Jedním příkladem je COBOL, nikdy jsem nerozuměl tomu, co muselo jít, ve kterém DIVIZE a SEKCE a proč. Dalšími příklady jsou PHP a Groovy.) S PHP Snažil jsem se pochopit, proč by to člověk potřeboval na prvním místě, vzhledem k tomu, že existuje Perl. Možná někdo může S Groovy také nerozumím trochu pojmům, které jsou za tím.

1
Ingo

Na všem záleží.

Vím, že to je často odpověď ...

Ale co znamenají základy ?? Mnoho lidí, kteří mají základy pro jedno paradigma (jako OO), nemá je pro jiné paradigma (jako funkční).

Mnoho lidí, kteří pocházejí z OO a zná všechny návrhové vzory, nemusí mít žádné stopy funkčních návrhových vzorů nebo věcí, jako je porozumění seznamu, kari, rekurze ocasu, uzávěry ...

ANO: pokud fundamenty znamenají základy všech paradigmat.

V tomto případě je problém, že javascript používá mnoho paradigmat, jako procedurální, OO a funkční trochu a má podivný rozsah přicházející z Java, c ++, ...

Takže základy v tomto případě nepomohou, ale vyzvednutí dalších základů a převod do jiného jazyka může být snazší a snazší, čím více vzorců získáte v sadě nástrojů.

1
Peter

Nezapomeňte, že umění počítačového programování je umění zůstat přesně to, co máte na mysli. Programovací jazyk je tedy jakýkoli způsob, jak počítači sdělit, co dělat, od Java až po přístup k Excelu do Visual Fortranu).

A některé jazyky jsou prostě špatné. IMHO Excel a Basic jsou špatné jazyky; Java a C++ jsou dobré jazyky. Skriptování FileMaker je hrozný jazyk. Pokud nejste nedbalí, HTML může být vynikající.

Můžete se to naučit? Pokud je to dobré, ano. Pokud je to špatné, záleží na vašem znechucení. Věci, díky kterým chcete zvracet, se těžko učí.

Ne každý se zavazuje používat jazyk X v projektu, pokud jste už s jazykem X neviděli a nehráli jste se.

0
Andy Canfield

Odpověď zní: „Toto není fakt mýtus!“

Jsem stejně jako ty, pracoval jsem také v různých technologiích. Java, .net a nedávno spolupracovali s iPhone, Android a blackberry.

Síť je plná zdrojů, prostudujte si informace, pochopte, implementujte to a posuňte se dále.

Ve skutečnosti „Technologie je určena pro vývojáře, kteří nejsou vývojáři pro technologie, Technologické změny, ale vývojáři ne“.

:)

0
necixy