Toon posts:

[Java] Thread vraagje

Pagina: 1
Acties:

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class TestClass implements Runnable 
{
    
    private Thread m_Thread;
    
    /* (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
    public void run() 
    {
    

        try 
        {
            while(!stop){ }
        }
    catch (IOException e) 
        {
            
        }
    
    }
    
    public void start() 
    {
        m_Thread = new Thread(this);
        m_Thread.run();
    }

    public void doSomethingElse()
    }

    }
}


Mijn vraag is of ik doSomethingElse aan kan roepen terwijl de run code al draait. Zoja, wat betekent dat voor de run methode?

[ Voor 11% gewijzigd door Verwijderd op 24-05-2006 16:26 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:09

Janoz

Moderator Devschuur®

!litemod

Die kun je gewoon aanroepen (mits je je } omdraait ;)). Zodra de thread gestart is heb je eigenlijk gewoon twee threads. 1 waarin je orginele code draait en 1 waarin de run draait. Wat het exact voor de run methode betekent is afhankelijk van wat je in doSomethingElse doet en wat je in de run doet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • kim72
  • Registratie: Oktober 2001
  • Laatst online: 07-02 18:12
Dat is geen enkel probleem. Waar je wel rekening mee moet houden is dat als je attributen van TestClass gaat gebruiken vanuit zowel de run methode als vanuit doSomeThingElse() dat je dat op beide plekken in een synchronized block moet doen.

Verwijderd

kim72 schreef op woensdag 24 mei 2006 @ 16:26:
Dat is geen enkel probleem. Waar je wel rekening mee moet houden is dat als je attributen van TestClass gaat gebruiken vanuit zowel de run methode als vanuit doSomeThingElse() dat je dat op beide plekken in een synchronized block moet doen.
Zou je ook even willen uitleggen waarom dat zo zou zijn?

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Verwijderd schreef op woensdag 24 mei 2006 @ 16:29:
[...]

Zou je ook even willen uitleggen waarom dat zo zou zijn?
Omdat ze allebei op 1 attribuut gaan rekenen, en dat kan goed fout gaan.

Verwijderd

Y0ur1 schreef op woensdag 24 mei 2006 @ 16:33:
Omdat ze allebei op 1 attribuut gaan rekenen, en dat kan goed fout gaan.
Precies. Het kan, maar het hoeft dus net zo makkelijk niet fout te gaan. Het is simpelweg afhankelijk van de data die je ophaalt. Je hoeft iig niet zomaar met "synchronized" te gaan smijten wanneer Threading om de hoek komt kijken ;)

VB:

een methode "void progress(int percentage)" die je vanuit je thread aanroept om aan te geven wat de status is van je process hoef je niet te syncen.

[ Voor 18% gewijzigd door Verwijderd op 24-05-2006 16:37 . Reden: voorbeeld toegevoegd ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:09

Janoz

Moderator Devschuur®

!litemod

Ligt eraan wat je wenselijk vindt. Ikzelf vind de stelling 'moet je in een sync block' zetten nogal bruut. Dat hoeft namelijk alleen als tijdens een stukje code exclusieve toegang tot een attribuut gewenst is en dat tijdens deze bewerking iemand anders niet tussendoor mag fietsen om de waarde aan te passen.

Het te pas en te onpas met sync blokken gooien zorgt er alleen maar voor dat de kans op een deadlock groter wordt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Ok duidelijk, als ik in beide functies aan een vectorlijst werk zal ik dat stukje code binnen een synchronized blok moeten zetten:

code:
1
2
3
4
synchronized(this) 
{
   code...
}

Verwijderd

Verwijderd schreef op woensdag 24 mei 2006 @ 16:41:
Ok duidelijk, als ik in beide functies aan een vectorlijst werk zal ik dat stukje code binnen een synchronized blok moeten zetten...
Duidelijk niet dus, kijk maar eens naar de documentatie van vector... ;)

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op woensdag 24 mei 2006 @ 16:43:
[...]


Duidelijk niet dus, kijk maar eens naar de documentatie van vector... ;)
Dat ligt er natuurlijk ook aan wat je er mee wil doen. Een Vector op zich is natuurlijk wel thread safe maar als jij meerdere bewerkingen op een Vector wilt doen die van elkaar afhankelijk zijn kan het wel nodig zijn dat je moet syncen

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op woensdag 24 mei 2006 @ 16:29:
[...]
Zou je ook even willen uitleggen waarom dat zo zou zijn?
Tenzij ze stateless/immutable zijn uiteraard :)

Als iets stateless is, dan kan het zonder problemen in een multithreaded omgeving ingezet worden. Omdat je dus geen shared data hebt dan kan veranderen, heb je dus ook geen isolatie problemen (dus geen concurrency problemen).

[ Voor 34% gewijzigd door Alarmnummer op 24-05-2006 17:07 ]


Verwijderd

@Alarmnummer
Daar hoeven ze natuurlijk niet eens stateless/immutable voor te zijn. Bijvoorbeeld als de data niet triviaal is. Wanneer je polled naar data, zoals een of andere counter van aangemelde gebruikers, dan hoef je doorgaans ook niet te syncen.

@rwb
Zie voorgaande posts.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op woensdag 24 mei 2006 @ 18:09:
@Alarmnummer
Daar hoeven ze natuurlijk niet eens stateless/immutable voor te zijn. Bijvoorbeeld als de data niet triviaal is. Wanneer je polled naar data, zoals een of andere counter van aangemelde gebruikers, dan hoef je doorgaans ook niet te syncen.
Dat ligt er aan. Als jij een long gaat uitlezen die niet volatile is en niet synchronized, dan kan je niet in 1 atomic actie die waarde uitlezen en kan je info uitlezen dat in principe bij 2 long values hoort (1 helft van de oude waarde, en een helft van de nieuwe waarde). Dus je moet er wel goed mee opletten. Maar er zijn idd situaties te bedenken waarbij synchronisatie niet belangrijk is (vooral als de data beetje stale mag zijn zoals een counter voor display functionaliteit).

[ Voor 7% gewijzigd door Alarmnummer op 24-05-2006 18:29 ]


Verwijderd

@alarmnummer
Euh ja, dat zeg ik toch? Wat is je punt?

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 20-02 14:32
Verwijderd schreef op woensdag 24 mei 2006 @ 18:09:
@Alarmnummer
Daar hoeven ze natuurlijk niet eens stateless/immutable voor te zijn. Bijvoorbeeld als de data niet triviaal is. Wanneer je polled naar data, zoals een of andere counter van aangemelde gebruikers, dan hoef je doorgaans ook niet te syncen.

@rwb
Zie voorgaande posts.
Goed, ga jij maar is zo'n stukje code draaien op een multi processor omgeving.

Verwijderd

Dat werkt ook prima op een multiprocessor omgeving.

offtopic:
Neem ajb ook even de moeite om de rest van de posts in dit topic te lezen en daarbij vooral te letten op woorden als kan en hoeven. Dan zijn dergelijke reacties namelijk compleet overbodig.

[ Voor 14% gewijzigd door Verwijderd op 25-05-2006 09:13 ]


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 20-02 14:32
Java biedt geen garanties over de synchronisatie tussen registers en main memory, tenzij je op de juiste manier het volatile keyword gebruikt.

Stel dat je een counter gebruikt om aantallen tussen twee threads te delen, dan kan het best zo zijn dat dat de mist in gaat vanwege een waarde die al verlaagd is in een register maar nog niet in main memory. Of nog leuker, de JIT compiler ziet dat een thread een counter wel erg vaak gebruikt, dan wordt die gewoon in het register geplaatst en zit ie daar altijd in zonder terug geplaatst te worden naar main memory. Waarschijnlijk crashed je systeem niet zo snel op dergelijke dingen, tenzij je dankzij een counter out of bounds gaat in een array. Maar het kan dus echt wel gewoon fout gaan.

offtopic:
Ja en? ;) We zijn toch met een leuke discussie bezig. Niks mis mee.

Verwijderd

Nee we zijn dus helemaal niet met een discussie bezig. We zeggen allemaal exact hetzelfde, namelijk:"het is afhankelijk van de situatie."

Of het nu een multi processor omgeving is, of dat het nu om mutable data gaat: Synchronisatie hangt simpelweg van de situatie af.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

mark platvoet: ik denk dat je voor wat verwarring zorgde door te zeggen "als de data niet triviaal is". Volgens mij bedoelde je juist als de data wél triviaal is :)

[ Voor 8% gewijzigd door .oisyn op 25-05-2006 13:27 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

ja, precies .oisyn :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op woensdag 24 mei 2006 @ 18:34:
@alarmnummer
Euh ja, dat zeg ik toch? Wat is je punt?
Mijn punt is: je moet ook soms bij triviale data synchroniseren of iets volatile maken. Longs worden bv niet atomic uitgelezen, dus het kan voorkomen dat 1 thread een long uitleest terwijl een andere thread de waarde aan het updaten is. Het gevolg is dat je dan onzin waardes uitleest. En zoals DDD al zegt, in sommige gevallen worden bepaalde waarden in registers gehouden en niet uit main memory gelezen, vb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
class BlaRunnable implements Runnable{
   private boolean stop = false;

   public void run(){
       while(!stop){
           System.out.println("bla");
       }
   }

   public void stop(){
        stop = true;
   }
}


De stop in de whilelus gaat waarschijnlijk in een register gezet worden en daardoor zal de while lus de nieuwe waarde niet meer uitlezen (dus deze manier om een thread te stoppen gaat niet werken).

Je moet dus goed oppassen met het unprotected uitlezen van waarden. Daarom synchroniseer ik, of maak ik iets volatile.

Verwijderd

Niets vernieuwends te melden dus. Je data is dus simpelweg niet triviaal (en deze keer bedoelde ik echt "niet" ;)). In mijn ogen is in dit geval triviale data (zoals ik het dus eerder bedoelde), data die je een benadering van de werkelijkheid geven.

Dus om nogmaals het eerder gegeven voorbeeld aan te halen. Een counter op een website die aangeeft hoeveel ingelogde gebruikers er zijn kan in principe gewoon non-synced en non-volatile worden uitgelezen. Immers na het tonen is de waarde hoogstwaarschijnlijk toch niet meer accuraat. (ik heb het dus niet over het update van de counter).

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op vrijdag 26 mei 2006 @ 09:34:
Niets vernieuwends te melden dus. Je data is dus simpelweg niet triviaal (en deze keer bedoelde ik echt "niet" ;)). In mijn ogen is in dit geval triviale data (zoals ik het dus eerder bedoelde), data die je een benadering van de werkelijkheid geven.

Dus om nogmaals het eerder gegeven voorbeeld aan te halen. Een counter op een website die aangeeft hoeveel ingelogde gebruikers er zijn kan in principe gewoon non-synced en non-volatile worden uitgelezen. Immers na het tonen is de waarde hoogstwaarschijnlijk toch niet meer accuraat. (ik heb het dus niet over het update van de counter).
Je mist een belangrijk punt: als die data niet atomic uitgelezen kan worden (en dat is bij doubles and longs zo), dan kan het voorkomen dat je onzin waardes uit loopt te lezen (dus getallen die nooit hebben bestaan in je systeem). En verder krijg je ook geen garanties van de vm dat:
-je een actuele waarde uit leest (het kan dus voorkomen dat je een en dezelfde waarde blijft uitlezen)
-dat je waarde meteen word geflushed naar main memory (het kan voorkomen dat die waarde pas erg laat in main memory terecht komt)
Dus daarom: syncen of volatile maken.

[ Voor 30% gewijzigd door Alarmnummer op 26-05-2006 10:27 ]


Verwijderd

Nee ik mis geen enkel punt. Je hebt het maar over je uitzondering verhaaltje waar de meesten hier wel van op de hoogte zijn. Het enige punt wat ik steeds maar duidelijk probeer te maken, en dan voornamelijk voor de TS, is dat het werken met threads niet direct impliceert dat je moet gaan synchroniseren. En dat is hetgeen, wat in een van de eerste reacties op de openings post, wel werd beweerd.

[ Voor 3% gewijzigd door Verwijderd op 26-05-2006 10:38 ]


Verwijderd

Verwijderd schreef op vrijdag 26 mei 2006 @ 10:35:
Nee ik mis geen enkel punt. Je hebt het maar over je uitzondering verhaaltje waar de meesten hier wel van op de hoogte zijn. Het enige punt wat ik steeds maar duidelijk probeer te maken, en dan voornamelijk voor de TS, is dat het werken met threads niet direct impliceert dat je moet gaan synchroniseren. En dat is hetgeen, wat in een van de eerste reacties op de openings post, wel werd beweerd.
Hier ben ik het geheel mee eens.

- Sun Certified Java Programmer -

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op vrijdag 26 mei 2006 @ 10:35:
Nee ik mis geen enkel punt. Je hebt het maar over je uitzondering verhaaltje waar de meesten hier wel van op de hoogte zijn. Het enige punt wat ik steeds maar duidelijk probeer te maken, en dan voornamelijk voor de TS, is dat het werken met threads niet direct impliceert dat je moet gaan synchroniseren. En dat is hetgeen, wat in een van de eerste reacties op de openings post, wel werd beweerd.
Lees mijn laatste 2 punten. Als je geen synchronisatie naar main memory hebt kan het voorkomen dat: je oude waardes voor het einde der tijden blijft uitlezen of dat wijzigingen tot het einde der tijden niet naar main memory worden weggeschreven. Daarom zeg ik: syncen of volatile maken. Andere opties zijn fout.

Ik ga er verder ook geen woorden meer aan vuil maken aangezien het in dit topic intussen al een groot aantal keren is uitgelegd.

[ Voor 8% gewijzigd door Alarmnummer op 26-05-2006 10:45 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op vrijdag 26 mei 2006 @ 10:43:
[...]
Hier ben ik het geheel mee eens.
- Sun Certified Java Programmer -
Diploma zeker bij een pak boter gekregen ;) Verder is dat diploma wel extreem niets zeggend.

[ Voor 10% gewijzigd door Alarmnummer op 26-05-2006 10:56 ]


Verwijderd

Nee.
Alarmnummer schreef op vrijdag 26 mei 2006 @ 10:43:
Daarom zeg ik: syncen of volatile maken.
Verwijderd schreef op vrijdag 26 mei 2006 @ 10:35:
[..]het werken met threads niet direct impliceert dat je moet gaan synchroniseren.
Verwijderd schreef op donderdag 25 mei 2006 @ 11:37:
We zeggen allemaal exact hetzelfde, namelijk:"het is afhankelijk van de situatie."

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Succes mark met je aanpak en je verdere toekomst. Aan jou zal ik geen woorden meer vies maken: je bent de moeite niet waard.

[ Voor 14% gewijzigd door Alarmnummer op 26-05-2006 11:09 ]


Verwijderd

Alarmnummer schreef op vrijdag 26 mei 2006 @ 11:08:
Succes mark met je aanpak en je verdere toekomst. Aan jou zal ik geen woorden meer vies maken: je bent de moeite niet waard.
Ik weet niet waarom je het nodig acht om zo te reageren? We zeggen toch gewoon hetzelfde?
Leg me dan eens uit waar mijn, voornamelijk op de TS gerichte, posts botsen met de werkelijkheid.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee jullie zeggen niet exact hetzelfde, jij zegt dat syncen danwel volatile niet altijd hoeft, Alarmnummer zegt dat je dat maar beter wel altijd kunt doen (dus óf syncen, óf volatile maken).

Daar ben ik het mee eens overigens, syncen is idd lang niet altijd nodig. Maar maak het dan op z'n minst volatile zodra je weet dat een variabele door meerdere threads tegelijk gebruikt gaat worden, dat voorkomt onnodige bugs. Misschien niet direct, maar dan wel in de toekomst.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

.oisyn schreef op vrijdag 26 mei 2006 @ 11:25:
Nee jullie zeggen niet exact hetzelfde, jij zegt dat syncen danwel volatile niet altijd hoeft, Alarmnummer zegt dat je dat maar beter wel altijd kunt doen (dus óf syncen, óf volatile maken).
Nee ik zeg dat synchroniseren (als in: synchronized keyword gebruiken (ik denk dat hier de meeste missverstanden door zijn ontstaan)) niet altijd hoeft. Maar welicht ben ik daar dan niet duidelijk genoeg over geweest. Ik had dus beter ook wat kunnen reppen over volatile.

Immers er werd in een van de eerste posts direct geroepen dat alle interacties met andere threads altijd en immer via synchronisatie blocks moet worden uitgevoerd. Dat, en alleen dat, wilde ik tegen spreken aangezien het niet waar is.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Tja, dat komt denk ik door een verschil in definitie. Om volatile te implementeren moet er weldegelijk aan synchronisatie gedaan worden. Niet op het niveau van mutexen/semaphoren (het syncronized keyword in java) maar wel op het niveau van interlocked reads/writes.

volatile is dus een lichtere vorm van synchronisatie.

[ Voor 10% gewijzigd door .oisyn op 26-05-2006 11:54 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

.oisyn schreef op vrijdag 26 mei 2006 @ 11:52:
Tja, dat komt denk ik door een verschil in definitie.
Ik denk eerder een verschil in context. Zoals gezegd doelde ik op het keyword synchronized. Ik denk dat als je het topic terugleest met dat gegeven in je achterhoofd, het allemaal wat logischer overkomt :)

Qua definitie verschillen we in ieder geval niet.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Sure, jij hebt gelijk. Zo, klaar :Y)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Jeetje, kan het allemaal even een beetje normaal mensen!? Het gaat er toch om dat we iemand die met een redelijke vraag komt helpen, en niet om je persoonlijk gelijk te halen. Ik probeer hier gewoon netjes op een normale manier helpen. En daarbij op een nette manier misverstanden uit de weg te helpen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nou nou, alsof ik zo onaardig doe :). Mijn punt was meer dat jouw laatste reactie weer inging op iets wat ik zei wat al helemaal niet met de discussie zelf te maken had (context ipv definitie, lekker boeiend denk ik dan), dus ik besloot bij deze jou gelijk te geven en het er verder niet meer over te hebben. Het is niet alsof de TS nog wat aan jouw reactie (sowieso de laatste 30 reacties van ons allemaal overigens) heeft.

En nu ga ik er echt niet meer op in, tenzij het weer ontopic is.

[ Voor 8% gewijzigd door .oisyn op 26-05-2006 13:18 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • misfire
  • Registratie: Maart 2001
  • Laatst online: 12-10-2024
Als data door meerdere threads wordt gelezen/geschreven moet je altijd met een vorm van synchronisatie (synchronized of volatile) werken, anders heb je geen garantie dat het werkt!

Dit is niet alleen vanwege memory barriers (het correct flushen van registers naar main memory en omgekeerd), waarbij het gedrag radicaal anders kan zijn afhankelijk van de hardware waar het programma op draait. De JIT compiler optimaliseert ook op basis van de synchronisatie-meta data en kan je programma stuk maken als je niet goed aangeeft dat data multi-threaded wordt gebruikt. Sinds Java 5 zijn de memory regels nog strenger op dit punt: als je niets aangeeft is je code vogelvrij.

Dat het niet alleen theorie is bewijst het voorbeeld van Alarmnummer wel aardig:
Alarmnummer schreef op vrijdag 26 mei 2006 @ 09:12:
[...]
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
class BlaRunnable implements Runnable{
   private boolean stop = false;

   public void run(){
       while(!stop){
           System.out.println("bla");
       }
   }

   public void stop(){
        stop = true;
   }
}
Als je de Sun JVM met -server start (en dus de server JIT compiler activeert) en de methode wordt ge-JIT dan ziet de compiler dat de variabele van de conditie van de while lus niet wordt veranderd binnen de lus. Omdat er geen markering is aangebracht dat de stop variabele multi-threaded kan worden gemanipuleerd brengt de compiler de volgende optimalisatie aan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class BlaRunnable implements Runnable{
   private boolean stop = false;

   public void run(){
       if (!stop) {
         while(true){
           System.out.println("bla");
         }
       }
   }

   public void stop(){
        stop = true;
   }
}

De compiler verplaatst het testen van de conditie zodat dit niet onnodig vaak hoeft te gebeuren, maar in dit geval resulteert het in een oneindige loop. Het gebeurt alleen als de JIT compiler ingesteld is om dit te doen (bij Sun de Server JVM van Java 5 en hoger) en alleen als de methode wordt ge-JIT (dus als je dit probeert moet je de methode eerst wel 10 keer aanroepen oid voordat de invocation threshold wordt overschreden). Je hebt er echter geen multi-proc machine of een 1 in de 1000000 keer scenario voor nodig: daarna gaat het gewoon stuk.

Moraal van het verhaal: gebruik altijd synchronisatie bij multi-threaded access. Dat het allemaal zo langzaam is is achterhaald: de JVM heeft inmiddels trucs als lock coarsening, en lock spinning en escape analysis om de impact minimaal te houden. Als je het niet doet dan kan het gewoon stuk gaan, op de meest vervelende en bizarre momenten (en misschien pas na een JVM upgrade).

  • flowerp
  • Registratie: September 2003
  • Laatst online: 04-02 02:01
Alarmnummer schreef op vrijdag 26 mei 2006 @ 10:49:
[...]

Diploma zeker bij een pak boter gekregen ;) Verder is dat diploma wel extreem niets zeggend.
Ben ik het niet mee eens. Je zegt toch ook niet dat bv een "inleiding programmeren" vak op het HBO of WO extreem niets zeggend is? Het is gewoon 1 van de velen mogelijke puzzel stukjes in je opleiding tot developper.

Net zoals het inleiding programmeren vak is de meer waarde boven bijvoorbeeld een willekeurig Java boek zelf gelezen te hebben, dat er zowel een cijfer aan gekoppeld is als het bewijs dat iemand het gedaan heeft. Natuurlijk moet je niet zo suf zijn om te denken dat iemand met -alleen- dit certificaat een goede programmeur zou zijn. Maar boven op andere referenties en diploma's / certificaten vind ik het toch meetellen (en nee, heb het certificaat zelf niet).

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

flowerp schreef op zaterdag 27 mei 2006 @ 12:57:
[...]
Ben ik het niet mee eens.
Hij maakt een opmerking over het volatile verhaal met als argument dat hij zijn 1e java diploma heeft. En dat is geen enkel argument, dus vandaar dat ik daar een opmerking over maak.
Pagina: 1