Una grande fetta di informatici non e' in grado di programmare?
Tuesday, 27 February 07
In diversi blog in lingua inglese stanno circolando una serie di allarmanti racconti di esperienze dirette di chi lavora nel campo della selezione del personale. A quanto pare molti candidati per posizioni di programmazione non sono in grado di scrivere in qualche minuto un programma che implementa la seguente specifica:
La gente che scrive pare attingere la sua esperienza da uffici siti negli Stati Uniti, e' abbastanza naturale chiedersi se qui da noi le cose sono simili. Giusto per capirci, molti dei programmatori (o pseudo tali) di cui sopra erano lauerati in computer science, non gente qualunque.
Dopo aver visto alcuni laureandi in informatica cio' non mi coglie troppo sprovvisto, ma insomma... non pensavo si potesse arrivare a questo punto. Io sono abbastanza lontano da qualunque ambiente universitario, mi chiedo se in Italia la situazione e' simile o se visto che da noi l'informatica e' ancora quasi una cosa di nicchia c'e' piu' selezione (allo stesso modo in cui 25 anni fa chi aveva un computer molto spesso sapeva almeno programmare un po' in BASIC).
Quando penso alla (per ora lontana anni luce) possiblita' di far crescere la mia azienda assumendo dei programmatori fantastico di persone davvero capaci che conoscono diversi linguaggi di programmazione e specialmente diversi paradigmi di programmazione, imperativo, funzionale, ad oggetti e dichiarativo. La realta' e' abbastanza diversa a quanto pare, per fortuna che non abbiamo una lira... ;)
Scrivere un programma che stampa i numeri da 1 a 100, scrivendo
Fizz al posto del numero se il numero e' multiplo di 3, Buzz
se il numero e' multiplo di 5 e per finire FizzBuzz se il numero
e' sia multiplo di 3 che di 5.
La gente che scrive pare attingere la sua esperienza da uffici siti negli Stati Uniti, e' abbastanza naturale chiedersi se qui da noi le cose sono simili. Giusto per capirci, molti dei programmatori (o pseudo tali) di cui sopra erano lauerati in computer science, non gente qualunque.
Dopo aver visto alcuni laureandi in informatica cio' non mi coglie troppo sprovvisto, ma insomma... non pensavo si potesse arrivare a questo punto. Io sono abbastanza lontano da qualunque ambiente universitario, mi chiedo se in Italia la situazione e' simile o se visto che da noi l'informatica e' ancora quasi una cosa di nicchia c'e' piu' selezione (allo stesso modo in cui 25 anni fa chi aveva un computer molto spesso sapeva almeno programmare un po' in BASIC).
Quando penso alla (per ora lontana anni luce) possiblita' di far crescere la mia azienda assumendo dei programmatori fantastico di persone davvero capaci che conoscono diversi linguaggi di programmazione e specialmente diversi paradigmi di programmazione, imperativo, funzionale, ad oggetti e dichiarativo. La realta' e' abbastanza diversa a quanto pare, per fortuna che non abbiamo una lira... ;)
Do you like this article?
Subscribe to the RSS feed of this blog or use the newsletter service in order to receive a notification every time there is something of new to read here.
Note: you'll not see this box again if you are a usual reader.
Subscribe to the RSS feed of this blog or use the newsletter service in order to receive a notification every time there is something of new to read here.
Note: you'll not see this box again if you are a usual reader.
Comments
1
28 Feb 07, 02:53:06
per non parlare di tecnici/sistemisti (o presunti tali), che sono convinti che il ping viaggi su TCP, nonostamte seguano aziende medio-grandi...
28 Feb 07, 06:20:21
a me è capitato di una cliente privata che utilizzava le zanzariere nel periodo primaverile per paura di infettare il PC; fatto realmente accaduto giuro, citato come paradosso per indicare la situazione anomala esistente nel nostro mercato, di gente esperta che messa alla prova non vale poi gran chè, e gente veramente esperta che magari non riesce a emergere..
28 Feb 07, 07:48:02
Mia esperienza: un prof di informatica dell'università di Catania mi invia sua tesista. Progetto: realizzare un CMS personalizzato per le esigenze dell'azienda in cui lavoro.
Parliamo, e sembra non sapere cosa è un CMS. Poco male, non pretendo che si viva di acronimi...
Le spiego un po' di cose, ma la faccia sembra di chi casca dalle nuvole.
Restiamo che le faccio avere un po' di documentazione per email.
Preparo tutto, glielo mando e la mail di risposta è sconcertante: "come apro un file .tar.gz?"
Un laureando di informatica è già grave che non sappia cosa sia un tar compresso gz. Ma è molto più grave che non sia in grado di risolvere da solo una cosa del genere...
Purtroppo è solo un esempio. Ne potrei fare una marea...
PS: io laureato in economia e commercio...
Parliamo, e sembra non sapere cosa è un CMS. Poco male, non pretendo che si viva di acronimi...
Le spiego un po' di cose, ma la faccia sembra di chi casca dalle nuvole.
Restiamo che le faccio avere un po' di documentazione per email.
Preparo tutto, glielo mando e la mail di risposta è sconcertante: "come apro un file .tar.gz?"
Un laureando di informatica è già grave che non sappia cosa sia un tar compresso gz. Ma è molto più grave che non sia in grado di risolvere da solo una cosa del genere...
Purtroppo è solo un esempio. Ne potrei fare una marea...
PS: io laureato in economia e commercio...
28 Feb 07, 09:34:59
il mio assistente di laboratorio l'ho visto manovrare con una calamitona da cassa su un hardisk molto più piccolo di questa convinto che quello fosse l'unico modo per eliminare completamente un virus.
La cosa assurda è che questa gente cercava di insegnare a programmare il Javascript a gente che a 15 anni smanettava con la creazione di algoritmi di compressione in delphi...o giù di li.
La cosa assurda è che questa gente cercava di insegnare a programmare il Javascript a gente che a 15 anni smanettava con la creazione di algoritmi di compressione in delphi...o giù di li.
01 Mar 07, 23:19:28
Per dirla in php... :)
<?php
function stampaMul($lim_a,$lim_b,$mul1,$mul2) {
if ($lim_a == 0) {
$lim_a =1;
}
for ($i=$lim_a; $i<$lim_b;$i++) {
$conta = "".$i;
$div1 = $i/$mul1;
$r1 = $i%$mul1;
$r2 = $i%$mul2;
$r3 = $i%($mul1*$mul2);
if ($r1 == 0) {
$conta ="Fizz";
}
if ($r2 == 0) {
$conta ="Buzz";
}
if ($r3 == 0) {
$conta ="FizzBuzz";
}
echo $conta."<br/><br/>";
}
}
//test
stampaMul(0,100,3,5);
?>
Antir, dopo questo non puoi non prendermi a lavorare con te.
lol
Secondo me, comunque, sono molto più importanti i paradigmi di programmazione che non i singoli linguaggi che d'altronde è bene conoscere per poter valutare le proprie affinità con gli stessi.
<?php
function stampaMul($lim_a,$lim_b,$mul1,$mul2) {
if ($lim_a == 0) {
$lim_a =1;
}
for ($i=$lim_a; $i<$lim_b;$i++) {
$conta = "".$i;
$div1 = $i/$mul1;
$r1 = $i%$mul1;
$r2 = $i%$mul2;
$r3 = $i%($mul1*$mul2);
if ($r1 == 0) {
$conta ="Fizz";
}
if ($r2 == 0) {
$conta ="Buzz";
}
if ($r3 == 0) {
$conta ="FizzBuzz";
}
echo $conta."<br/><br/>";
}
}
//test
stampaMul(0,100,3,5);
?>
Antir, dopo questo non puoi non prendermi a lavorare con te.
lol
Secondo me, comunque, sono molto più importanti i paradigmi di programmazione che non i singoli linguaggi che d'altronde è bene conoscere per poter valutare le proprie affinità con gli stessi.
02 Mar 07, 13:19:44
:)
<?
function func($i){
if ($i%3==0 && $i%5==0){return "FuzzBizz";}
if ($i%3==0){return "Bizz";}
if ($i%5==0){return "Fuzz";}
return $i;
}
$i=0;while($i<100){echo func($i++)."<br>";}
?>
<?
function func($i){
if ($i%3==0 && $i%5==0){return "FuzzBizz";}
if ($i%3==0){return "Bizz";}
if ($i%5==0){return "Fuzz";}
return $i;
}
$i=0;while($i<100){echo func($i++)."<br>";}
?>
04 Mar 07, 17:27:58
Ciao Maestro,
condivido pienamente la tua impressione, la vivo attualmente facendo trainig ad ingegneri meccanici che di meccanica non ne capiscono tanto.
Se poi assumi manovalanza e ti serve un ing meccananico inccalito fortranista eccomi
do i=1,100
if mod(i,3)= 0 and mod(1,5)=0 then
print*,"fizz buzz"
cycle
elseif mod(i,3) = 0 then
print*,"fizz"
elseif mod(i,5) = 0 then
print*,"buzz"
enddo
condivido pienamente la tua impressione, la vivo attualmente facendo trainig ad ingegneri meccanici che di meccanica non ne capiscono tanto.
Se poi assumi manovalanza e ti serve un ing meccananico inccalito fortranista eccomi
do i=1,100
if mod(i,3)= 0 and mod(1,5)=0 then
print*,"fizz buzz"
cycle
elseif mod(i,3) = 0 then
print*,"fizz"
elseif mod(i,5) = 0 then
print*,"buzz"
enddo
04 Mar 07, 17:30:29
Errata Corrige
trascuro gli errori di ortografia... ma il codice lo corrego con
do i=1,100
if mod(i,3)= 0 and mod(1,5)=0 then
print*,"fizz buzz"
cycle
elseif mod(i,3) = 0 then
print*,"fizz"
elseif mod(i,5) = 0 then
print*,"buzz"
else print*,i
enddo
non ho compilato per testare... provo appena ho linuxuccio sotto mano
trascuro gli errori di ortografia... ma il codice lo corrego con
do i=1,100
if mod(i,3)= 0 and mod(1,5)=0 then
print*,"fizz buzz"
cycle
elseif mod(i,3) = 0 then
print*,"fizz"
elseif mod(i,5) = 0 then
print*,"buzz"
else print*,i
enddo
non ho compilato per testare... provo appena ho linuxuccio sotto mano
05 Mar 07, 14:59:07
la versione fortran mi mancava ;)
Non fate progettare aereoplani a quegli
ingegneri per piacere. Ciao!
Non fate progettare aereoplani a quegli
ingegneri per piacere. Ciao!
11 Mar 07, 19:45:42
Ci vuole ben poco ;)
Ma se devo essere sincero quasi no.. perche' questo "cycle" suona molto oscuro.
Ma se devo essere sincero quasi no.. perche' questo "cycle" suona molto oscuro.
12 Mar 07, 09:00:59
dai cycle in italiano suona benissimo come "CICLA",
cioe' passa al ciclo successivo...
Ben nel fortran 77 doveva usarsi una cosa tipo
do i=1,10
if i.eq.4 then
print*,"xxxx"
goto 10
endif
altre istruzioni
10 enddo
cioe' passa al ciclo successivo...
Ben nel fortran 77 doveva usarsi una cosa tipo
do i=1,10
if i.eq.4 then
print*,"xxxx"
goto 10
endif
altre istruzioni
10 enddo
16 Mar 07, 06:04:22
Questo scorcio di fortran mi fara` fare gli incubi stanotte. Pensavo di averlo totalmente rimosso, ora mi tocchera` tornare in psicanalisi.
17 Mar 07, 06:35:28
per panta: hehe ho grosse difficolta' anche io ad accettare fortran ma e' duro a morire. Forse in parte perche' rispetto al C per la semplicita' semantica i compilatori ottimizzanti possono fare di meglio, e visto che viene usato per ammaccare numeri...
18 Mar 07, 18:14:05
Non che voglia fare il difensore del fortra...
pero' c'e' da dire che il Fortran95 è molto moderno è comodo da usare per sviluppare programmi di calcolo "sicuri".
Il FORTRAN77 è un vero dinosauro, anacronistico ma ancora usato.
Ma altro motivo che rende il Fortran usato in certi ambiti è data dal numero di librerie praticamente bug-free dalla facile parallellizzazione del codice e dai compilatori estremamente ottimizzati, specialmente quelli per il vecchi Fortran77.
Panta, scusami non volevo farti fare degli incubi ;)
pero' c'e' da dire che il Fortran95 è molto moderno è comodo da usare per sviluppare programmi di calcolo "sicuri".
Il FORTRAN77 è un vero dinosauro, anacronistico ma ancora usato.
Ma altro motivo che rende il Fortran usato in certi ambiti è data dal numero di librerie praticamente bug-free dalla facile parallellizzazione del codice e dai compilatori estremamente ottimizzati, specialmente quelli per il vecchi Fortran77.
Panta, scusami non volevo farti fare degli incubi ;)
19 Mar 07, 04:50:03
non voglio iniziare flame wars, e non sono un esperto di Fortran, ma mi pare che il mito(?) dei compilatori migliori e altre questioni annesse (matrici row-major vs column-major), siano stati ampiamente demistificati. Tra l'altro ormai i compilatori hanno backend in comune tra C e Fortran, quindi la supposta maggior efficienza di uno dei due dovrebbe essere legata al front-end, cosa poco plausibile, vista la struttura tutto sommato simile dei linguaggi (imperativi, typing statico stretto). Una volta forse poteva essere vero, ma oggi nutro dei dubbi. L'unico punto rimane quello delle librerie numerico, ma in realta ormai ce ne sono carettate anche per C/C++.
Del resto se fosse vero che Fortran e` piu` efficiente per computazioni numeriche, sarebbe utilizzato anche in CG, mentre non mi risulta che nemmeno un applicazione di fascia alta di modelling o rendering sia scritta in Fortran. Infine i linguaggi di programmazione degli shader delle GPU sono modellati attorno al C, non al Fortran, e sono interfacciabili da C. Il che da accesso a decine di GFlops da programmi in C su computer di fascia bassa (basta una scheda video da poche centinaia di euro)...
Del resto se fosse vero che Fortran e` piu` efficiente per computazioni numeriche, sarebbe utilizzato anche in CG, mentre non mi risulta che nemmeno un applicazione di fascia alta di modelling o rendering sia scritta in Fortran. Infine i linguaggi di programmazione degli shader delle GPU sono modellati attorno al C, non al Fortran, e sono interfacciabili da C. Il che da accesso a decine di GFlops da programmi in C su computer di fascia bassa (basta una scheda video da poche centinaia di euro)...
20 Mar 07, 08:39:15
è vero. interessanti gli e esempi delle soluzioni una più corta della altra. chi vuole fare informatica oggi non ha bisogno di università ma di voglia di imparare. Tutte le risorse necessarie si trovano in internet. Poi sono
convinto che un professore universitario d'informatica potrebbe diventare outdated se non si tiene aggiornato con le tendenze.L'informatica non e come la geografia che rimane quella non cambia durante gli ani.
convinto che un professore universitario d'informatica potrebbe diventare outdated se non si tiene aggiornato con le tendenze.L'informatica non e come la geografia che rimane quella non cambia durante gli ani.
20 Mar 07, 13:12:57
per panta: non so oggi ma fino a qualche anno fa abbiamo testato alcuni algoritmi sulle matrici o cose del genere implementati nella maniera diretta (il codice C e fortran era quasi identico concettualmente) senza pensare a strane ottimizzazioni e il codice fortran era sensibilmente piu' veloce in quasi tutti i casi. Il compilatore era quello della intel, ma le prestazioni erano superiori anche rispetto al compilatore C della intel. Forse e' possibile che essendo il fortran meno "potente" ci sono molti casi in cui e' piu' facile verificare alcune condizioni che portano ad ottimizzazioni abbastanza pesanti.
21 Mar 07, 09:15:12
antirez, si, avevo sentito, ma non c'e` nessun motivo che sia cosi`. E` possibile che per certe operazioni ricorrenti (moltiplicazione di matrici, ad esempio), il compilatore fortran "imbrogli", e faccia loop-unrolling automaticamente. Bisognerebbe vedere quali sono le configurazioni di default dei front-end. Sarebbe anche interessante vedere l'assembly generato per i due codici. L'unico problema che mi viene in mente per il C e` l'esistenza dei weak-symbols, ma con codice semplice non dovrebbero esserci differenze.
21 Mar 07, 09:16:48
Dimenticavo, Fortran 77 puo` essere compilato meglio di Fortran 90 proprio perche' non ha i puntatori. Fortran 90 da questo punto di vista ha lo stesso "difetto" del C, quindi...
22 Mar 07, 07:32:41
vedere mio commento (il II°) @t http://antirez.com/post/52
sulla CompleXità del codice :-D
(P.S: ma devo sempre scrivere limone x postare? Non potremo iniziare a cambiare frutto, che so.. melone??)
sulla CompleXità del codice :-D
(P.S: ma devo sempre scrivere limone x postare? Non potremo iniziare a cambiare frutto, che so.. melone??)
05 May 07, 12:38:40
In python scritto pulito pulito:
i=1
while i<=100:
if i%3==0 and i%5==0:
print 'FizzBuzz'
i+=1
if i%3==0:
print 'Fizz'
i+=1
elif i%5==0:
print 'Buzz'
i+=1
else:
print i
i+=1
i=1
while i<=100:
if i%3==0 and i%5==0:
print 'FizzBuzz'
i+=1
if i%3==0:
print 'Fizz'
i+=1
elif i%5==0:
print 'Buzz'
i+=1
else:
print i
i+=1
17 May 07, 19:47:40
Ho appena letto i tuoi articoli sull'iterazione perciò mi sembrava bello applicarlo, inoltre visto che tutti avevano usato if ho pensato di farlo diversamente anche se perde completamente di leggibilità e forse ci mette anche di più
Non sono un programmatore però... autodidatta.
function iterate(s, e) {
if (s <= e){
var n = (s%3 == 0) ? (s%5 == 0) ? "FizzBuzz" : "Fizz" : (s%5 == 0) ? "Buzz" : s ;
return n + iterate(s+1,e);
}
return "";
}
iterate(1,100)
Non sono un programmatore però... autodidatta.
function iterate(s, e) {
if (s <= e){
var n = (s%3 == 0) ? (s%5 == 0) ? "FizzBuzz" : "Fizz" : (s%5 == 0) ? "Buzz" : s ;
return n + iterate(s+1,e);
}
return "";
}
iterate(1,100)
14 Jan 08, 12:54:45
ho sempre odiato gli if, per cui propongo in prima istanza qualcosa senza
<?php
function pippo($first,$last)
{
for($i=$first; $i<$last; $i++)
{$a[$i]=$i;}
for ($i=floor($first/3);$i<=floor($last/3);$i++)
{$a[$i*3]="Fizz";}
for ($i=floor($first/5);$i<=floor($last/5);$i++)
{$a[$i*5]="Buzz";}
for ($i=floor($first/15);$i<=floor($last/15);$i++)
{$a[$i*15]="FizzBuzz";}
for($i=$first; $i<=$last; $i++)
{echo $a[$i];}
}
non l'ho provato per mancanza di tempo.
p.s. sono autodidatta e programmo solo raramente per necessità per cui abbiate pietà
<?php
function pippo($first,$last)
{
for($i=$first; $i<$last; $i++)
{$a[$i]=$i;}
for ($i=floor($first/3);$i<=floor($last/3);$i++)
{$a[$i*3]="Fizz";}
for ($i=floor($first/5);$i<=floor($last/5);$i++)
{$a[$i*5]="Buzz";}
for ($i=floor($first/15);$i<=floor($last/15);$i++)
{$a[$i*15]="FizzBuzz";}
for($i=$first; $i<=$last; $i++)
{echo $a[$i];}
}
non l'ho provato per mancanza di tempo.
p.s. sono autodidatta e programmo solo raramente per necessità per cui abbiate pietà
11 May 08, 11:09:33
Bah, cose assurde... menomale che sono laureati...
In ruby:
1.upto(100) do |number|
p number
print "Fizz" if number%3==0
print "Buzz" if number%5==0
end
Anche io autodidatta.
In ruby:
1.upto(100) do |number|
p number
print "Fizz" if number%3==0
print "Buzz" if number%5==0
end
Anche io autodidatta.
03 Jun 08, 20:06:37
Ma lol... allora faccio bene ad abbandonare quell'uni del cacchio -.- imparo tutto da casa che è meglio.
(c++)
#include "iostream"
using namespace std;
int main()
{
for(int i=1; i<101; ++i)
{
if( !(i%3) )
cout << "FIZZ";
if( !(i%5) )
cout << "BUZZ";
cout << endl;
}
return EXIT_SUCCESS;
}
(c++)
#include "iostream"
using namespace std;
int main()
{
for(int i=1; i<101; ++i)
{
if( !(i%3) )
cout << "FIZZ";
if( !(i%5) )
cout << "BUZZ";
cout << endl;
}
return EXIT_SUCCESS;
}
14 Oct 09, 14:25:44
26 Feb 10, 16:28:43
St4alk3r la tua versione non stampa il numero se nessuna delle condizioni è vera :)
Ecco la mia versione :-D
#include <iostream>
int main() {
for (int i = 1; i <= 100; i++)
if (i % 3 == 0 && i % 5 == 0)
std::cout << "FizzBuzz" << std::endl;
else
if (i % 3 == 0)
std::cout << "Fizz" << std::endl;
else
if (i % 5 == 0)
std::cout << "Buzz" << std::endl;
else
std::cout << i << std::endl;
return 0;
}
Ecco la mia versione :-D
#include <iostream>
int main() {
for (int i = 1; i <= 100; i++)
if (i % 3 == 0 && i % 5 == 0)
std::cout << "FizzBuzz" << std::endl;
else
if (i % 3 == 0)
std::cout << "Fizz" << std::endl;
else
if (i % 5 == 0)
std::cout << "Buzz" << std::endl;
else
std::cout << i << std::endl;
return 0;
}
29 Jun 10, 09:07:58
La cosa non mi sorprende neanche più di tanto. Ho avuto la fortuna di toccare con mano sia una facoltà di ingegneria informatica italiana sia una di informatica danese, e se nel primo caso si ha tanta teoria con poche applicazioni (il che vuol dire ingegneri informatici che escono sapendo come risolvere un integrale triplo in coordinate cilindriche, come funziona il ciclo di Carnot in una macchina a vapore e come compilare uno stato patrimoniale in partita doppia, ma non hanno mai scritto una sola riga di SQL al computer), nel secondo caso si ha lo scenario opposto (ogni esame prevede progetti Java FUNZIONANTI per testare con mano se gli studenti sanno applicare i concetti appresi, ma un unico corso di matematica dove fra l'altro si imparano i fondamenti di algebra lineare all'acqua di rose per poterli applicare direttamente alla programmazione). Inutile dire che la via giusta sta nel mezzo. Posso comunque assicurarvi che la maggior parte dei miei "colleghi" italiani ingegneri informatici avrebbero avuto difficoltà a scrivere un codice del genere al primo colpo, mentre invece qui in Danimarca probabilmente l'avrebbero scritto al primo colpo, ma se li metti di fronte a un calcolo di derivata anche elementare vanno nel pallone.
Comunque, giusto per fare lo sbruffone in Perl in una sola riga di codice:
!($_ % 15) ? print "FizzBuzz " : (!($_ % 3) ? print "Fizz: " : ( !($_ % 5) ? print "Buzz: " : print "")) && print "$_\n" for (1..100);
Comunque, giusto per fare lo sbruffone in Perl in una sola riga di codice:
!($_ % 15) ? print "FizzBuzz " : (!($_ % 3) ? print "Fizz: " : ( !($_ % 5) ? print "Buzz: " : print "")) && print "$_\n" for (1..100);
09 Jul 10, 10:57:19
Ahahahah, io ho iniziato ieri a studiare un po' di Python e ho scritto il programma in 2 minuti 2!
Da precisare che non ho conoscenze di programmazione e che i miei studi sono di ben altra natura!
Se mi va male nel mio campo posso sempre provare a fare il sysadmin, pagano bene a quel che ho visto!
Da precisare che non ho conoscenze di programmazione e che i miei studi sono di ben altra natura!
Se mi va male nel mio campo posso sempre provare a fare il sysadmin, pagano bene a quel che ho visto!
23 Nov 10, 04:11:32
Ho trovato l'esercizio e ho provato...
giusto?
for a in range(1,101):
if a % (3 * 5) == 0 :
print "fizz-buzz"
elif a % 5 == 0:
print "buzz"
elif a % 3 == 0 :
print "fizz"
else:
print a
giusto?
for a in range(1,101):
if a % (3 * 5) == 0 :
print "fizz-buzz"
elif a % 5 == 0:
print "buzz"
elif a % 3 == 0 :
print "fizz"
else:
print a