-
1. Data: 2012-01-12 17:08:08
Temat: To prawda?
Od: " M.M." <m...@W...gazeta.pl>
Cytat z perełek oprogramowania, bez mojego komentarza:
Większość ludzi sądzi, że mając w ręku przedstawiony opis, można napisać kod
bez trudu. Mylą się jednak. Jedynym sposobem, byś się o tym Szanowny
Czytelniku przekonał, jest odłożenie książki na bok i samodzielene napisanie
programu. Spróbuj.
Zadałem to ćwiczenie na wykładach dla zawodowych programistów. Mieli kilka
godzin na zamianę powyższego opisu na program w języku, który sobie wybrali;
wystarczał pseudo język wysokiego poziomu. Pod koniec określonego czasu prawie
wszyscy zgłosili, że mają poprawnie zapisane procedury. Przeznaczyliśmy 30
minut na sprawdzanie kodu, co programiści robili za pomocą zadanych testów.
Wyniki osiągane w różnych grupach z ponad setką programistów, były mniej
więcej takie same: dziewięciu na dziesięciu znalazło błędy w swych funkcjach
(a nie zawsze byłem przekonany o poprawności kodu, w którym błędów nie wykryto).
Byłem zdumiony: mimo dostatecznej ilości czasu, zaledwie 10% zawodowych
programistów zdołało poprawnie zapisać ten niewielki programik. Nie tylko dla
nich zadanie okazało się trudne: w części poświęconej historii, w p 6.2.1
książki Sortowanie i wyszukiwanie Kunth podkreśla, że wprawdzie pierwszy
algorytm wyszukiwania binarnego ukazał się drukiem w 1946r, ale na pierwszą
jego publikację nie zawierającą błędów trzeba było czekać do 1962r"
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
2. Data: 2012-01-12 19:11:47
Temat: Re: To prawda?
Od: " " <f...@N...gazeta.pl>
M.M. <m...@W...gazeta.pl> napisał(a):
> Cytat z perełek oprogramowania, bez mojego komentarza:
>
> Większość ludzi sądzi, że mając w ręku przedstawiony opis, można napisać kod
> bez trudu. Mylą się jednak. Jedynym sposobem, byś się o tym Szanowny
> Czytelniku przekonał, jest odłożenie książki na bok i samodzielene napisanie
> programu. Spróbuj.
> Zadałem to ćwiczenie na wykładach dla zawodowych programistów. Mieli kilka
> godzin na zamianę powyższego opisu na program w języku, który sobie wybrali;
> wystarczał pseudo język wysokiego poziomu. Pod koniec określonego czasu
prawie
> wszyscy zgłosili, że mają poprawnie zapisane procedury. Przeznaczyliśmy 30
> minut na sprawdzanie kodu, co programiści robili za pomocą zadanych testów.
> Wyniki osiągane w różnych grupach z ponad setką programistów, były mniej
> więcej takie same: dziewięciu na dziesięciu znalazło błędy w swych funkcjach
> (a nie zawsze byłem przekonany o poprawności kodu, w którym błędów nie
wykryto)
> .
> Byłem zdumiony: mimo dostatecznej ilości czasu, zaledwie 10% zawodowych
> programistów zdołało poprawnie zapisać ten niewielki programik. Nie tylko
dla
> nich zadanie okazało się trudne: w części poświęconej historii, w p 6.2.1
> książki Sortowanie i wyszukiwanie Kunth podkreśla, że wprawdzie pierwszy
> algorytm wyszukiwania binarnego ukazał się drukiem w 1946r, ale na pierwszą
> jego publikację nie zawierającą błędów trzeba było czekać do 1962r"
>
przypuszczam ze to prawda ale nie widze by tu bylo coskolwiek
dziwnego, moze ew dziwic tych ktorzy nie programują
dla mnie normalka jest ze prawie kazde kilka wklepanych
linijek zwraca mi blad, a raz na jakis czas (ale dosyc rzadko
(stosunkowo, chyba nie codzien ale gdzies tak raz na pare dni
moze (? - nie wiem bo nie prowadzilem statystyk czy czegos takiego))
zdarza sie trudniejszy blad wymagajacy poszukiwania przyczyny)
i tak nie to jest problemem w mojej robocie, problemy sa inne
np:
- koniecznosc poszukiwania informacji (np jak zrobic gaz na
dyskretnej siatce)
- to ze niektore rozwiazania nie wychodzą tak dobrze jak
by bylo fajnie i ze nie ma na to jasno okreslonego przepisu
:/
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
3. Data: 2012-01-12 19:16:15
Temat: Re: To prawda?
Od: "identifikator: 20040501" <N...@g...pl>
a mnie się zdaje, że niektóre błędy robi się celowo, żeby je później
wychwycić w debugowaniu, np. początkowa wartość jakiejś zmiennej... ale
faktem jest, że młodzi walą masę błędów...
-
4. Data: 2012-01-12 21:44:35
Temat: Re: To prawda?
Od: n...@m...invalid
W dniu 12.01.2012 r. 18:08, M.M. pisze:
> Cytat z perełek oprogramowania, bez mojego komentarza:
>
> Większość ludzi sądzi, że mając w ręku przedstawiony opis, można napisać kod
> bez trudu. Mylą się jednak. Jedynym sposobem, byś się o tym Szanowny
> Czytelniku przekonał, jest odłożenie książki na bok i samodzielene napisanie
> programu. Spróbuj.
> Zadałem to ćwiczenie na wykładach dla zawodowych programistów. Mieli kilka
> godzin na zamianę powyższego opisu na program w języku, który sobie wybrali;
> wystarczał pseudo język wysokiego poziomu. Pod koniec określonego czasu prawie
> wszyscy zgłosili, że mają poprawnie zapisane procedury. Przeznaczyliśmy 30
> minut na sprawdzanie kodu, co programiści robili za pomocą zadanych testów.
> Wyniki osiągane w różnych grupach z ponad setką programistów, były mniej
> więcej takie same: dziewięciu na dziesięciu znalazło błędy w swych funkcjach
> (a nie zawsze byłem przekonany o poprawności kodu, w którym błędów nie wykryto).
> Byłem zdumiony: mimo dostatecznej ilości czasu, zaledwie 10% zawodowych
> programistów zdołało poprawnie zapisać ten niewielki programik. Nie tylko dla
> nich zadanie okazało się trudne: w części poświęconej historii, w p 6.2.1
> książki Sortowanie i wyszukiwanie Kunth podkreśla, że wprawdzie pierwszy
> algorytm wyszukiwania binarnego ukazał się drukiem w 1946r, ale na pierwszą
> jego publikację nie zawierającą błędów trzeba było czekać do 1962r"
>
> Pozdrawiam
Ciekawy głos. IMHO nazbyt często jest to ignorowane. Ludzie są
doskonałym automatem niedeterministycznym dysponującym pamięcią
asocjacyjną, wnioskowaniem logicznym i myśleniem abstrakcyjnym -- ale za
cenę, że popełniają błędy. To był m.in. motywator do tego, by rozwijać
w "pozytywistycznym okresie" AI programy do wnioskowania maszynowego,
dowodzenia teoremów, a dziś stoi za statyczną weryfikacją programów lub,
dajmy na to, projektowaniem deklaratywnym (aczkolwiek nie podam źródeł).
Skrajnie nieliczna grupa ludzi (wręcz sawantów) potrafi przeprowadzać
analizę warunków brzegowych i innych przez większość czasu zaangażowania
umysłowego.
Zresztą stanowi to jedną z podwalin OOP -- analityczne podejście do
rozwiązywania problemów. Jak wiadomo, obdarzone tendencją do redundancji.
Programiści powinni o tym nie zapominać.
-
5. Data: 2012-01-12 23:16:14
Temat: Re: To prawda?
Od: A.L. <l...@a...com>
On Thu, 12 Jan 2012 20:16:15 +0100, "identifikator: 20040501"
<N...@g...pl> wrote:
>a mnie się zdaje, że niektóre błędy robi się celowo, żeby je później
>wychwycić w debugowaniu, np. początkowa wartość jakiejś zmiennej... ale
>faktem jest, że młodzi walą masę błędów...
Tak. Znam instytucje w ktorej programisci dostawali 20 dolarow premii
za kazdy wykryty i poprawiony blad. Zlikwidowano to gdy programisci
zawiazali "spoldzielnie" ktorej czlonkowie zaczeli zarabiac druga
pensje
A.L.
-
6. Data: 2012-01-13 07:59:59
Temat: Re: To prawda?
Od: Paweł Kierski <n...@p...net>
W dniu 2012-01-12 18:08, M.M. pisze:
> Cytat z perełek oprogramowania, bez mojego komentarza:
>
> Większość ludzi sądzi, że mając w ręku przedstawiony opis, można napisać kod
> bez trudu. Mylą się jednak. Jedynym sposobem, byś się o tym Szanowny
> Czytelniku przekonał, jest odłożenie książki na bok i samodzielene napisanie
> programu. Spróbuj.
[...]
Czy prawda? Weź kartkę i spróbuj napisać wyszukiwanie binarne. Sprawdź
poprawność.
Serio - zdarzało mi się dawać tego typu zadania kandydatom. Dla mnie
celem nie było zobaczenie poprawnego rozwiązania, ale sposobu pisania
i tego, czy kandydat ma świadomość, że w 15 minut będzie prawie
niemożliwe jest rozwiązanie bez błędów, uwzględniające wszystkie
szczególne przypadki.
--
Paweł Kierski
n...@p...net
-
7. Data: 2012-01-13 09:47:08
Temat: Re: To prawda?
Od: "M.M." <m...@N...gazeta.pl>
Paweł Kierski <n...@p...net> napisał(a):
> Czy prawda? Weź kartkę i spróbuj napisać wyszukiwanie binarne. Sprawdź
> poprawność.
>
> Serio - zdarzało mi się dawać tego typu zadania kandydatom. Dla mnie
> celem nie było zobaczenie poprawnego rozwiązania, ale sposobu pisania
> i tego, czy kandydat ma świadomość, że w 15 minut będzie prawie
> niemożliwe jest rozwiązanie bez błędów, uwzględniające wszystkie
> szczególne przypadki.
Trzy wersje procedury. Po 7 minutach miałem jakieś badziewie. Po 13 minutach
wersję z błędem. Po 20 minutach miałem napisany prosty test i wersję
z poprawionym błędem. Podczas pisania nie patrzyłem na żaden
metakod ani schemat blokowy. Ostatnio ten algorytm musiałem napisać...
dawno temu, więc z pamięci też go nie pisałem. Jakbym miał jeszcze z 10
minut to bym rozwinął rekurencje ogonową. Faktyczne w 15 minut nie
zdążyłem, ale zdaniem autora 9 zawodowych programistów na 10 nie
zdążyła w kilka godzin - wydaje się dziwne. Ale może został w moim
kodzie jakiś błąd?
#include <cstdlib>
#include <cstdio>
// 7 minut
int binary_search( const int vector[] , const int start , const int end ,
const int wanted ) {
const int size = end - start;
if( size <= 0 ) return -1;
if( size == 1 ) return vector[start] == wanted ? start : -1;
const int divided = start + ( end - start ) / 2;
const int new_start = vector[divided] <= wanted ? start : divided + 1;
const int new_end = vector[divided] <= wanted ? divided : end;
return binary_search( vector , new_start , new_end , wanted );
}
// 13 minut
int binary_search( const int vector[] , const int start , const int end ,
const int wanted ) {
const int size = end - start;
if( size < 0 ) abort();
if( size == 0 ) return vector[start] == wanted ? start : -1;
const int divided = start + ( end - start ) / 2;
if( vector[divided] <= wanted )
return binary_search( vector , start , divided , wanted );
return binary_search( vector , divided+1 , end , wanted );
}
// 20 minut
int binary_search( const int vector[] , const int start , const int end ,
const int wanted ) {
const int size = end - start;
if( size < 0 ) abort();
if( size == 0 ) return vector[start] == wanted ? start : -1;
const int divided = start + size / 2;
if( wanted <= vector[divided] )
return binary_search( vector , start , divided , wanted );
return binary_search( vector , divided+1 , end , wanted );
}
int main(int argc, char *argv[]) {
const int test1[22] = { 0 , 1 , 5 , 8 , 10 , 11 , 100 , 101 , 111 , 230 ,
1111 , 2222 , 3333 , 4001 , 4002 , 4003 ,5000 , 5500 , 5555 , 6000 , 6001 ,
6002 };
int sum = 0;
for( int i=0 ; i<=6666 ; i++ ) {
sum += binary_search( test1 , 0 , 21 , i ) != -1;
}
printf("sum: %d\n" , sum );
return 0;
}
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
8. Data: 2012-01-13 10:26:17
Temat: Re: To prawda?
Od: Paweł Kierski <n...@p...net>
W dniu 2012-01-13 10:47, M.M. pisze:
> Paweł Kierski<n...@p...net> napisał(a):
>
>> Czy prawda? Weź kartkę i spróbuj napisać wyszukiwanie binarne. Sprawdź
>> poprawność.
>>
>> Serio - zdarzało mi się dawać tego typu zadania kandydatom. Dla mnie
>> celem nie było zobaczenie poprawnego rozwiązania, ale sposobu pisania
>> i tego, czy kandydat ma świadomość, że w 15 minut będzie prawie
>> niemożliwe jest rozwiązanie bez błędów, uwzględniające wszystkie
>> szczególne przypadki.
>
> Trzy wersje procedury. Po 7 minutach miałem jakieś badziewie. Po 13 minutach
> wersję z błędem. Po 20 minutach miałem napisany prosty test i wersję
> z poprawionym błędem. Podczas pisania nie patrzyłem na żaden
> metakod ani schemat blokowy. Ostatnio ten algorytm musiałem napisać...
> dawno temu, więc z pamięci też go nie pisałem. Jakbym miał jeszcze z 10
> minut to bym rozwinął rekurencje ogonową. Faktyczne w 15 minut nie
> zdążyłem, ale zdaniem autora 9 zawodowych programistów na 10 nie
> zdążyła w kilka godzin - wydaje się dziwne. Ale może został w moim
> kodzie jakiś błąd?
Kilka rzeczy - o ile pamiętam oryginalnie chodziło o wersję iteracyjną.
Rekurencyjna jest prostsza faktycznie, w iteracyjnej dużo łatwiej
o błedy. Po drugie - piszemy na kartce i testujemy na kartce 8-)
Trzecie - książka mimo wszystko opisuje sytuację z przed ponad 20 lat
(o ile nie więcej).
Wg mnie zawsze jest to świetny test na pokorę i umiejętne oszacowanie
pracochłonności implementacji. Oraz świetnie pokazuje różnicę między
"u mnie (chyba) działa"
(http://www.codinghorror.com/blog/2007/03/the-works-
on-my-machine-certification-program.html)
a "działa".
--
Paweł Kierski
n...@p...net
-
9. Data: 2012-01-13 12:29:44
Temat: Re: To prawda?
Od: Tomek Banach <b...@b...org>
On 2012-01-13 10:47, M.M. wrote:
> Ostatnio ten algorytm musiałem napisać...
> dawno temu, więc z pamięci też go nie pisałem.
Ale kiedys go pisales albo analizowales to moim zdaniem zmienia postac
rzeczy.
--
Tomek
-
10. Data: 2012-01-13 13:10:47
Temat: Re: To prawda?
Od: " M.M." <m...@N...gazeta.pl>
Tomek Banach <b...@b...org> napisał(a):
> On 2012-01-13 10:47, M.M. wrote:
> > Ostatnio ten algorytm musiaĹem napisaÄ...
> > dawno temu, wiÄc z pamiÄci teĹź go nie pisaĹem.
>
> Ale kiedys go pisales albo analizowales to moim zdaniem zmienia postac
> rzeczy.
Wiadomo ze to pomaga, ale tamtym zawodowym programistom powinno pomagac
mniej/wiecej tak samo jak mnie. Nie wierze ze 9ciu na 10ciu sie pomyli w
tym algorytmie majac do dyspozycji kilka godzin czasu.
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/