Теми от: Декември '09
Батерията на Canon 350D
Удивително! Понеже идиотите от TAP airlines ми затриха куфара с багажа (в който ми беше зарядното на фотоапарата), ми се "удаде" уникалният шанс да проверя колко снимки мога да направя до пълен разряд на батерията на Canon 350D:
vesko@lappy:~$ cd photos/Portugal/
vesko@lappy:~/photos/Portugal$ find . | grep -i vesko | wc -l
975
Сиреч - почти 1000 снимки на 3 годишен фотоапарат, с кой знае колко вече цикъла на батерията. 350D rlz :)
Публикувано в категория Hardware -- 31 Dec 2009, 00:26, 1 коментар -- View in English
Защо Java (като език за обучение) суче?
Днес във ФМИ, освен много интересния семинар по рейтрейсинг, организиран от 3-ма български докторанта на университета в Саарбрюкен, и техния мастит професор Филип Слусалек, имаше и една среща с професора - в заседателната зала (онази, голямата, с готините маси). Преди семинара, проф. Слусалек ни разказваше най-различни неща, свързани с образованието. Две от тях наистина ми направиха впечатление. Смятах отдавна да пиша по въпроса тук, но днешната среща с професора ми даде стартова тяга.
Разказвайки за техния подход към образованието на Computer Science студентите си, той започна с това, че първия семестър, лекциите по програмиране се водят на Scheme.
Scheme? Wtf?!? Окей, това не е нова идея, и в MIT е така - но все пак в MIT отива половината гняс от международните състезания по информатика и математика, така че там новаци тъй или иначе няма. И на Brainfuck да ги учеха, нямаше да е голям проблем.
Но все пак. Scheme? Saarland? Самият професор призна, че част от първокурсниците идват с малко (или никакви) умения в програмирането, но изтъкна че...
"но, разбирате ли, част от идващите са доста добри програмисти, хакери, така да ги наречем. Те са много над нивото на останалите. И подронват авторитета на преподаващите, знаейки толкова много. Scheme им помага да охладят страстите си и ги поставя на едно ниво с новаците. Хакерите, ако и да са страшни в C++ или Perl или Bash, често не са и чували за Scheme..."
Тази част ми хареса. Наистина действа отрезвяващо на човек, научил един език до съвършенство, мислещ, че знае всичко, да му се докаже нагледно колко не е прав!
По-нататък професора спомена, че следващия семестър се водят курсове по практическо програмиране, което преди се е водело на C++, но сега минали на Java, и изрази съжалението си от този факт. Java-та не бил толкова добър език за обучение, не бил достатъчно close-to-the-metal и прочее.
Тук няма как да съм по-съгласен с професора, но моите причини са малко по-различни. За мен, Java не е достатъчно добър език за програмиране в университета, просто защото не е достатъчно сложен и не развива достатъчно абстрактното мислене. Да, това че е прост, и че е толерантен към грешките на програмиста, го прави подходящ за бизнес софтуер, но в университета това са негови недостатъци, а не предимства.
За да не се задълбавам в детайлен анализ по този въпрос, ви препоръчвам да прочетете прекрасната статия на Joel Spolski, където той е описал нещата много по-добре, отколкото аз мога. Тук ще илюстрирам само основните му точки и ще допълня малко мои възгледи.
Относно първия недостатък - простотата: идеята на един университет е да оцени и отсее добрите студенти от ... кхм.. не толкова добрите. На една програма по информатика, целта е да отсее истинските програмисти от посредствените. В тази насока, един гаден, гнусен, труден, и въобще - ужасен език, като C++, играе ролята на много добър филтър: човек, който се забатачи с указателите и не може да изкове една прилична имплементация на едносвързан списък (без memory leaks при това!) явно не го бива много-много, така или иначе. Такъв човек не трябва да завършва университета.
А е наистина жалко, че в последните години и във ФМИ се забелязва тенденцията C++ да се замества с Java. Така студентите не само нямат нужда да реализират свързан списък (имат си го в стандартната библиотека, защо им е?), но даже и да искат, не могат. Допуска се хора, които не могат да напишат едносвързан списък, да завършат университет и да си мислят, че ги бива в програмирането. А това е жалко.
Момента с указателите и ръчния memory management (като нещо, което развива характер в програмиста) е много важен и от една друга гледна точка. Докато човек пише, да речем, процедурата за изтриване на елемент от едносвързан списък, той трябва да мисли едновременно на две нива на абстракция: на едно ниво от гледна точка на клетките с данни, и на друго, от гледна точка на указателите и връзките между клетките. И ако на човек това му се струва сложно, да почака да види какво става в по-сложните структури данни като индексни дървета или хеш-таблици.
Окей де, но кой наистина на практика, в бизнеса, си играе да пише индексни дървета и хеш таблици? И защо изобщо е да се учат някакви излишни неща, при положение, че не са нужни в работата? Така стигаме и до третия въпрос, които искам да засегна: има една немалка група студенти във ФМИ, които непрекъснато мрънкат, че езиците и технологиите, които се изучават, са безнадеждно остарели, и че преподавателите като цяло са много назад с материала. Не може ли, вместо всичките тези излишни курсове по диференциални уравнения (примерно), да се пусне нещо наистина полезно, като C# .NET или Flash или JavaScript или ... и т.н. Тази група не се пресича непременно с другата (с посредствените програмисти), но истината е, че ако човек просто иска да иде някъде, където да научи най-новите технологии, с които после да бачка и да кърти големите пари, то мястото му не е в университета. Един практически курс по .NET отнема 6 месеца на един сериозен човек и струва по-малко (от финансова и времева гледна точка) от 4-те години Компютърни Науки във ФМИ примерно. Хората, които искат да са в индустрията, просто трябва да си отидат в академията на Наков и да приключат с въпроса.
Университетът не е развъдник на програмисти, които индустрията да консумира. Университетът не e подчинен на индустрията въобще. Последната винаги ще се оплаква, че няма достатъчно кадри, и, че "абе не можете ли тея деца да ги учите на нещо по-смислено, ами трябва като идват при нас да ги почваме от нулата". Но наистина, университетът не е роб на желанията на индустрията. Той е институция, която цели да изгради определен начин на мислене във възпитаниците си (с което ФМИ се справя, в голямата си част, добре), и да се занимава с ресърч (където, трябва да признаем, нещата не са толкова добре, но се правят опити). Нормално е да няма много допирни точки с индустрията.
Но, наистина, постоянните оплаквания и сополи от това колко труден е C++* най-накрая са постигнали съмнителната цел да се мине на Java, защото, хей, за доста хора C/C++ наистина се оказа филтърът, който ги спря във втори курс. И после избягаха да работят на Java или C# някъде, където просто плащат добре, ползват най-новите технологии, вадят си сертификатчета и са куул. А истината е, че един добър програмист може да научи даден нов език за съвсем кратко време, след като има основата и модела в главата си. И няма значение дали е C++ guru, който отива в Java средата или обратно - ако е добър, няма значение. Ако е посредствен, то ще е истинско мъчение.
Резултатът от Javaризацията на ФМИ вече си личи дори при моите студенти. Не една или две работи вече проверявам, при които, в най-вътрешния цикъл на алгоритъма, студентът смело създава 3D вектора, който трябва да се върне като резултат, като го заделя на heap-а! Дори на човек с базова школовка по ръчен memory management веднага ще му светне червената лампа в главата, че липсва съответния delete. Но това, че генерират брутален memory leak, явно въобще не ги притеснява, защото при тях се оказва, че паметта стига. Щеше ми се да не стигаше.
--
* тук наистина не се хващайте за езика: със същия успех може да дадете за пример C или Pascal - и в двата си имате ръчен memory management и може да си оплетете каквато каша си поискате с указателите.
Публикувано в категория Програмиране -- 15 Dec 2009, 04:35, 6 коментара