🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #2055

Re: c en java - verschil vocabulair/syntax

#2055
From: John Bokma
Date: Thu, 28 Oct 2004 13:21
175 lines
7437 bytes
Philip Paeps wrote:

> Dirk Bollen <d.bollen@telenet.be> wrote:
>> Dit is zeker niet de zoveelste poging om een discussie te beginnen
>> tussen java en c.
> 
> <steek>Ze is bij voorbaat gewonnen door C ;-)</steek>
> 
>> Maar ik wil het even hebben over de verschillen tussen de 2 talen en
>> hun vocabulair en syntax en de beste manier om een programmeertaal
>> aan te leren. 
> 
> Het zijn gewoon twee compleet verschillende talen.  Java leent
> misschien hier en daar wat elementen uit C, maar het is fundamenteel
> gewoon een andere taal. De meeste talen lenen hier en daar wel iets
> van C (behalve die onnozele BASIC afkooksels natuurlijk).

Perl leent o.a. dingen van BASIC. Er is op zich weinig mis met BASIC 
overigens.

> OO is leuk, maar niet voor alles de correcte oplossing.  Ik hou zelf
> nogal van het eenvoudige leven zonder object-verslaving.

OO wil niet zeggen dat je allerlei is-a relaties moet gaan zitten 
verzinnen. Het mag, maar het hoeft niet.

> Het leuke
> aan een bare-bones taal zoals C is dat je ook effectief iets moet
> _doen_.  Java doet veel magic zonder dat je er iets van ziet.  Dat
> vind ik een Bad Thing[tm].  Als je als programmeur niet weet wat er
> under the hood gebeurt,

Dan moet je dat leren. Dat kan bij Java ook. En uiteraard zijn er 
grenzen, net als bij C.

> ben je volgens mij niet goed bezig.

Ik vind dat je als programmeur niet (altijd) goed bezig bent als je 
alles tot op de bodem wilt weten hoe het intern werkt. Dat is ook 
onmogelijk omdat je tot sommige dingen lastig toegang hebt, en/of het 
verandert nogal.

> Je kunt
> naar mijn bescheiden mening onmogelijk performante code gaan schrijven
> als je niet weet hoe je compiler/assembler/linker die code 
> uiteindelijk op hardware-niveau gaan uitspuwen en wat je processor
> daar dan over denkt.

Dan schrijf je code voor 1 specifieke toepassing. Alleen als de 
specifieke toepassing daar om vraagt is dat handig. Anders is het onzin. 
Beter je concentreren op het ontwerpen van algoritmes, dan op assembly 
nivo wat instructies optimaliseren, tenzij je algortime al optimaal is, 
en het verder een eis is om optimaal te draaien.

> Uiteraard kan je met Java gewoon onmogelijk performante code
> schrijven,

Klets.

> want hoe performant je code ook is, ze komt altijd in die
> vreselijke VM terecht waar ze veel te veel tijd moet doorbrengen.

Lees meer over wat JIT precies is. En je kritiek is een hoop geklets in 
de ruimte, voor veel toepassingen is de performance van Java goed. 
Daarnaast wordt deze beter.

> Een
> normale taal kan je meteen zonder omwegen naar machine-language
> omzetten, wat serieuze performance voordelen heeft.

Alleen als daar noodzaak toe is. Iemand die in C zit te tweaken is 
meestal een berg tijd kwijt. Op het moment dat het programma af is, is 
de processorsnelheid al weer een paar procent omhoog...

> Haal gewoon een Free stuursysteem op je machine, zoek bugs, en fix ze.
>  Er is niets zo leerrijk als een kernel debuggen.

Er zijn hier en daar kritieken op de kwaliteit van de kernel code :-D. 
De slechtste manier om te leren programmeren is een stuk bestaande code 
tweaken.

>> Uiteindelijk willen ik beide c en java programmeren, dus als er een
>> argument zou zijn waarom ik beter met de ene starten laat het me
>> weten. Later zou ik ook nog andere willen leren (Perl, python,
>> enz..). 
> 
> Als je puur beginner bent, begin je misschien best met iets als Perl

Eh... gezien je kritieken op Java is dat wel een waanzinnig advies :-D

> of Python.  Die zijn makkelijk te leren,

Oh? Nu ken ik Perl behoorlijk goed, maar ik wil het zeer zeker geen 
makkelijk te leren taal noemen. En ik weet zeker dat dit voor Python ook 
op gaat. Sterker, ik ken geen enkele makkelijk te leren programmertaal. 
Let op: ik bedoel met programmertaal leren niet dat je weet wat if en 
while doet, maar ook alles wat je nodig hebt om er zinnig in te 
programmeren (libraries etc.).

> en ze leren je ook niet al te
> veel slechte gewoontes aan.

Een taal leert je niks aan, dat doe je als programmeur zelf.

> Met bare-bones talen als C is het
> makkelijk om zeer hardnekkige fouten te leren,

Dat gaat op voor elke programmeertaal.

> en die zijn moeilijk om af te leren.

welnee.

> Java is zeker af te raden als eerste taal: way too much
> magic

Die magic kan je in twee dingen splitsen: een deel dat je moet begrijpen 
(garbage collection, resources die je vrij *moet* geven, etc) en een 
deel waar je je normaal niet tot nauwelijks druk om hoeft te maken.

> en veel te brede standard library.

Oei, en wat is daar mis mee? Elke programmeertaal die enig nut heeft 
komt met een library. De afmeting van de library is een maat voor de 
kwaliteit van de language (ik tel dan rommelige libraries even niet mee 
;-) )

> Bij het leren programmeren is het vooral belangrijk dat je leert
> nadenken. Taaltjes

Taaltjes? Heb je wel eens serieus naar Java gekeken?

> als Java vinden dat nadenken tegen elke prijs
> verboden moet worden,

Huh?

> of als er nagedacht moet worden, dat dat liefst
> zo abstract mogelijk kan, en over dingen die niet echt belangrijk
> zijn.

Eh, hoeveel dagen ervaring heb jij met Java? Ik heb nog nooit meegemaakt 
dat ik in Java per se iets abstract moest doen ( als je al niet abstract 
kan programmeren :-) ), het is een *keuze*. Je hoeft geen complete 
klasse-hierarchie te maken om een class Schroef te maken.

>> Misschien nog wat info, ik gebruik linux.
> 
> Good.  Very good.  Je hebt al een goed systeem met een goeie
> development interface en een handige toolchain.

Voor elk gangbaar OS zijn er goede ontwikkelomgevingen beschikbaar, 
sterker, voor Windows wellicht betere (de code kwaliteit van compilers 
schijnt beter te zijn b.v.).

> Niets staat je in de
> weg om veel te leren van je systeem en over de wonderen van
> programmeren. 

Dat kon al goed op een ZX Spectrum :-D.
 
>> Ik wil gewoon op mijn eigen tempo geleidelijk aan goed leren
>> programmeren met veel oefeningen.
> 
> Haal er 'The C Programming Language' even bij.  Die staat vol
> oefeningen :-) 

C is nog minder een beginnerstaal dan Perl of Python. Sterker, als je 
niet moet, zou ik zeker niet aan C beginnen.

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Technical Details
Message-ID: <Xns959054F1D6F19castleamber@130.133.1.4>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!fu-berlin.de!uni-berlin.de!not-for-mail
References: <NyTfd.1802$%b.268379@phobos.telenet-ops.be> <41807646$0$78749$e4fe514c@news.xs4all.nl>

Show Full Headers
Complete Article Headers
X-Google-Thread: fcea4,99c1bd24c9ce05ae
X-Google-Attributes: gidfcea4,public
X-Google-Language: DUTCH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!fu-berlin.de!uni-berlin.de!not-for-mail
From: John Bokma <postmaster@castleamber.com>
Newsgroups: be.comp.programming
Subject: Re: c en java - verschil vocabulair/syntax
Date: 28 Oct 2004 13:21:03 GMT
Organization: Castle Amber - software development
Lines: 175
Message-ID: <Xns959054F1D6F19castleamber@130.133.1.4>
References: <NyTfd.1802$%b.268379@phobos.telenet-ops.be> <41807646$0$78749$e4fe514c@news.xs4all.nl>
X-Trace: news.uni-berlin.de CXPEqoGoFhcwOA2ExhT3EAyYm2sSoUaJQgvVV2B1QGuka2l3z7
User-Agent: Xnews/5.04.25
X-Face: $7h&5K*ZL9*ZQ\6Hco2"V?1dD*C<ab^>zlws[S%i0b,@gKk|[,)Y-<hk143{.Ov"x{({zo( l,N\m`-_^nJfVQdEyt+-uAP^7WG]5mHj9&::7X-qK;Yv;xmRvNWQR"_igw+cr5WMj;6:zlj<R80Ei@ $gGWq&*{FL*kC*a