печально быть антисоциальным - Why Joel on Software sucks?

Jan. 4th, 2005

01:27 pm - Why Joel on Software sucks?

Previous Entry Add to Memories Tell A Friend Next Entry

Džoela konteksts: Advice for Computer Science College Students.

Viņa atrunas:"I, too, have no idea what I'm talking about when I give advice to college students." "So you'd be better off ignoring what I'm saying here [..]"

Slikts ir viņa otrais padoms: "Learn C before graduating." (Pirms beidz skolu, iemācies C)



Un tagad pēc kārtas:


Esmu piekasīgs, bet vienīgais kam šajā rindkopā piekrītu ir, ja Tu nezini C, "You'll never be able to work on compilers and operating systems". Izņemot Lispus un SmallTalkus un daudz ko citu, bet nebūsim sīkumaini. C rakstot kerneļus un ļoti ātras programmas noder.

Un tagad pats labākais "if you can't explain why while (*s++ = *t++); copies a string, or if that isn't the most natural thing in the world to you, well, you're programming based on superstition".

- Joel, this sucks!

Neiedziļinoties debatēs, par to, ko nozīmē 'superstition', pastāstīšu par while (*s++ = *t++);.

Sucks 1: Tiek izmantoti C stringi un tas nav teksts. Tas ir datu masīvs (pēc kārtas sekojošu elementu kopums) no 8bitu skaitļiem, kur pēdējais elements ir 0 (nulle). Pārējie apzīmē rakstzīmes. ASCII kodējumā, vai kādā citā, kurš neietver sevī elementu ar kodu 0.
- C stringi nesatur informāciju par valodu un kodējumu, kādā šīs valodas zīmes ir pierakstītas. Attiecīgi viņi ir izmantojami tikai speciālgadījumā (ASCII un ļoti līdzīgie kodējumi, kuros var ierobežoti attēlot dažas valodas). Mūsdienīgos kodējumos, kā UTF-8/UTF-16 tas vairs nav iespējams. (šeit ir koncentrēti uzrakstīts par citām stringu problēmām)

Sucks 2: C stringus ir neērti lietot Pirms nav pāriets viss strings, nav zināms tā garums, attiecīgi nav zināms, cik daudz vietas jārezervē, cik chari (skaitļa tips) jākopē un tamlīdzīgi. Tāpat ir grūtības ar citām manipulācijām, kā stringu apvienošanu, saīsināšanu.


Nu ko, tātad s un t ir char* tipa mainīgie. Var arī nebūt, bet Džoels domā, ka esam gudri bērni un lasām citus viņa sacerējumus.

char* ir norāde(pointer) uz masīvu, kas sastāv no char tipa elementiem. char ir 8 bitu skaitlis (0-255).


s++ ir operators, kurš atgriež s vērtību un pēc tam norāda uz nākošo masīva elementu. To pašu dara arī t++, tikai ar masīvu t.

* ir operators, kas, atrodoties norādes priekšā, atgriež pašu mainīgo uz kuru tiek norādīts.
= ir operators, kas pārkopē vienu mainīgo uz otru un atgriež sākotnējā mainīgā vērtību. Piemēram: int a,b; a = b = 3; gan a, gan b būs vērtība 3.

Tātad *s++ = *t++ ņem vērtību, kas atrodas mainīgajā uz ko norāda t, tad pārvieto norādi uz priekšu, šo vērtību iekopē mainīgajā uz ko norāda s un pārvieto norādi (s) uz priekšu un tad atgriež vērtību kāda bija iekš *t).

Uz to arī paļaujas while(izteiksme), kas pārbauda, vai izteiksme ir patiesa. Tā kā pēc C noteikumiem visi skaitļi izņemot nulli tiek vērtēti kā patiesi, tad cikls (vērtību kopēšana) turpinās, līdz tiek sasniegts pēdējais elements, kas, kā zināms, ir 0.

Kapēc šitais Sucks 3? Pārlasiet vēl iepriekšējo. Ja kautko nesapratāt, vai es kautkur kļūdījos, tad sucks.

Sucks 4: efficiency or memory leaks? Un kas būs ja s un t ir dažādu garumu masīvi? Ja t ir garāks, tad s paredzētā vieta tiks aizpildīta, bet programma turpinās rakstīt atmiņā. Atmiņā šajā vietā var būt paredzēta vieta kodam (skatīt augstāk assambleru), vai citiem datiem. Un tad jau sākās visas kļūdu un hackeru briesmas.

Sucks 5: Kods ir sūdīgs. Netikai tapēc, ka izmantoti C triki, bet arī tapēc, ka mainīgie apzīmēti nesaprotamos vārdos. Varētu domāt, ka s nozīmē source, un t - target, bet kapēc tad no 'target' tiek kopēts uz 'source'? Laikam tomēr tie nozīmē kautko citu.




Šis ir tāds ilustratīvs piemērs, kapēc nevajadzētu mācīties C, pirms nav skaidrs, ko ar to grib panākt. Džoels var droši atgriezties savā darbā, kur viņš ikdienā pārlūko VisualBasic.NET programmētājus un raksta reklāmrakstus savā mājas lapā.

Es savukārt tikko teicami uzrakstīju eksāmenu programmēšanā (izmantojot C++) un došos uz darbu, kur tiks ģenerēts C++, izmantojot Python.



Pārējie Džoela padomi nav zemē metami:
1. Learn how to write before graduating.
2. Learn C before graduating.
3. Learn microeconomics before graduating.
4. Don't blow off non-CS classes just because they're boring.
5. Take programming-intensive courses.
6. Stop worrying about all the jobs going to India.
7. No matter what you do, get a good summer internship.
8. Seek professional help for that self-esteem thing.

(20 comments | Leave a comment)

Comments:

[User Picture]
From:[info]scibologs
Date:January 4th, 2005 - 01:39 pm
(Link)
un tagad aizbliez džoelam linku uz šitā anglisko versiju. pat es saprotu, ka džoela piemērs nemērā smird (c esmu programmējis tikai obligāto universitātes uzdevumu apjomā)
(Reply to this) (Thread)
[User Picture]
From:[info]smejmoon
Date:January 4th, 2005 - 06:17 pm
(Link)
Mana doma ir, ka dažos mēnešos(semestros) augstskolā var apgūt programmēšanas pamatus.

To nevar pamatot ar vārdiem C/C++ sux. Kad man būs labāki vārdi, tad būs vērts tulkot.
(Reply to this) (Parent) (Thread)
[User Picture]
From:[info]scibologs
Date:January 4th, 2005 - 06:50 pm
(Link)
nē, ja tu gribi būt korekts, tad nedari neko (priekš sevis jau tev tā pat viss ir skaidrs). ja gribi būt popstārs like joel, just do it. būs tādi kas gribēs piekrist tev neatkarīgi no argumentu dziļuma.
(Reply to this) (Parent)
From:[info]jazeps
Date:January 4th, 2005 - 02:24 pm
(Link)
viņš runā nevis par laba programmētāja veidošanu, bet par tāda cilvēka veidošanu, kurš varētu ierubīties tajā, kas notiek visapkārt. un visapkārt notiek c. doooo

tu ievēroji, ka puse tava stāsta ir par vienu rindiņu viņa stāstā?

bez tam. vai tiešām tajā atrunā neredzi ne pilītes sarkasma? tā rindiņa attiecas uz viņa nezināšanu par tiem, kas sēž draugiem.lv.
(Reply to this) (Thread)
From:[info]skalpelis
Date:January 4th, 2005 - 03:16 pm
(Link)
Viņš pietam stāsta par to, kas notiek tieši viņam visapkārt. Interesants, down-to-earth un subjektīvs viedoklis, un manuprāt, labāks nekā "ws ir nākotne", "nākotnē viss darbosies ar xml", ".NET enables your business" un tādiem līdzīgie.
(Reply to this) (Parent) (Thread)
[User Picture]
From:[info]viestards
Date:January 4th, 2005 - 03:59 pm
(Link)
btw, viņa blogs skaitās lasītākais MS un raksts "How Microsoft lost the API war" ticis apspriests pat augstos līmeņos AFAIR.
(Reply to this) (Parent) (Thread)
From:[info]jazeps
Date:January 4th, 2005 - 04:14 pm
(Link)
labrīt.
tas tak katra briļļaina puišeļa mērķis - pārspļaut spolski.
(Reply to this) (Parent)
[User Picture]
From:[info]smejmoon
Date:January 4th, 2005 - 06:18 pm
(Link)
"tu ievēroji, ka puse tava stāsta ir par vienu rindiņu viņa stāstā?"
tieši par vienu rindiņu arī ir šis stāsts. vienu rindiņu un daudziem nomocītiem studentiem.
(Reply to this) (Parent) (Thread)
From:[info]jazeps
Date:January 4th, 2005 - 06:21 pm
(Link)
nu bet saproti stāsta būtību - ne jau ideālo izglītības programmu viņš gudro. viņš stāsta, kas jāzina studentiem atbilstoši pašreizējai situācijai. viņš jau nav vainīgs, ka pasaulē valda, tavuprāt, sliktā valoda.
(Reply to this) (Parent) (Thread)
[User Picture]
From:[info]smejmoon
Date:January 4th, 2005 - 06:26 pm
(Link)
lūdzu pamato, kapēc un kur C valda? vai vismaz atspēko manus apgalvojumus.
un pamato, kapēc studentam C ir jāmāk pirms pabeidz skolu?
(Reply to this) (Parent) (Thread)
From:[info]jazeps
Date:January 4th, 2005 - 06:59 pm
(Link)
neko konkrētu es tev nevaru nosaukt. es maz ko saprotu par lietām, bet man ir radies iespaids, ka lielākā daļa koda, kas satur pasauli kopā ir rakstīta iekš c un c pabērnos c++, java un c#.

c jāmācās, lai izbaudītu programmēšanas zinātnes attīstību. kāda jēga no kaut kādas super duper valodas apgūšanas, kur ir viss uz šodienu iedomājamais, ja students neredz nekādu jēgu no lielākās daļas tajā valodā atrodamo iespēju. studentu jau uzreiz jāiepazīstina ar valodu, kur ir trūkumi.

before graduation nozīmē pirms bakalaura grāda saņemšanas. visus bakalaurantus asv sauc par undergraduates un maģistrantus par graduates.
(Reply to this) (Parent)
(no subject) - [info]hail_fuhrer
[User Picture]
From:[info]314
Date:January 4th, 2005 - 02:54 pm
(Link)
Principā varēji uzreiz stāstīt kāpēc strcpy() sux. ;)
(Reply to this)
[User Picture]
From:[info]watt
Date:January 4th, 2005 - 03:17 pm
(Link)
joel sucks because c string sucks. oook
(Reply to this) (Thread)
[User Picture]
From:[info]smejmoon
Date:January 4th, 2005 - 06:19 pm
(Link)
joel ir ok, tikai nevajag tik daudz glupības rakstīt. studentiem.
(Reply to this) (Parent)
From:[info]grrr
Date:January 5th, 2005 - 01:38 am
(Link)
Man šķiet, ka šeit ir stāstījuma un uztveres kontekstu atšķirība.

No stāsta kopumā man radās iespaids, ka joelis še drīzāk vēlējās norādīt uz to, ka ir vajadzīgs saprast, kas notiek pietiekami tuvu dzelžiem.

Asemblers tam protams ir it kā ideāls, taču te varbūt ir runa par to, ka C ir valoda, kura ir tuvu dzelžiem, un līdz ar to parāda atšķirību piemēram starp platformām (long/short/unsigned etc.), bet tai pašā laikā ir pietiekami pārskatāma, lai tajā varētu saskatīt algoritmus.
Varētu taču piekrist, ka asemblerā izpētīt kādu pietiekoši sarežģītu programmu būtu gana bezjēdzīgi - kamēr sapratīs, kas notiek, paies mežonīgi daudz laika. Tas pats ar rakstīšanu.

Citiem vārdiem - varbūt pēc Joela domām C ir pietiekami tuvu dzelžiem un parāda atkarību no tiem saprotamāk, jo ir labāk samērojams ar cilvēka uztveri.

Taču izsvītrot 1 padomu no 8 un deklarēt "joel on software sucks" ir gana .. hmm... tendenciozi?
(Reply to this) (Thread)
[User Picture]
From:[info]smejmoon
Date:January 5th, 2005 - 01:48 am
(Link)
Tas ir fleims.
(Reply to this) (Parent)
From:[info]ex_maita690
Date:January 5th, 2005 - 09:03 pm

It's on the first page

(Link)
FYI: Slashdot
(Reply to this)
From:[info]ulzha
Date:February 7th, 2010 - 07:42 pm
(Link)
UTF-8 ar C virknēm šajā kontekstā workzorz (atvainojos par veca puksta komentēšanu, bet vajag piefiksēt)
(Reply to this) (Thread)
[User Picture]
From:[info]smejmoon
Date:February 7th, 2010 - 08:20 pm
(Link)
piekrītu. atkarībā no tā, kā nodefinē datu struktūru un mainīgos.
(Reply to this) (Parent)