More...

Time is an illusion. Compile time - doubly so.

Теми от: Декември '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 -- clock 31 Dec 2009, 00:26, 1 коментар -- English View in English


thought

Защо 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 и може да си оплетете каквато каша си поискате с указателите.


Публикувано в категория Програмиране -- clock 15 Dec 2009, 04:35, 6 коментара

Language:

bgБългарски
enEnglish


Категории:

Мета
Hardware
Технологии
Забава
Open source
Интересно
Наляво-надясно
Простотии
Програмиране
Музика
Картинки
Фотография
Всички


Архив:

+ 2008 (21)
Март '08 (3)
Април '08 (5)
Май '08 (5)
Юли '08 (2)
Септември '08 (1)
Октомври '08 (2)
Декември '08 (3)
+ 2009 (15)
Януари '09 (2)
Февруари '09 (1)
Март '09 (1)
Юни '09 (1)
Юли '09 (1)
Август '09 (3)
Септември '09 (1)
Октомври '09 (2)
Ноември '09 (1)
Декември '09 (2)
+ 2010 (11)
Януари '10 (1)
Април '10 (2)
Юни '10 (2)
Юли '10 (1)
Септември '10 (1)
Ноември '10 (2)
Декември '10 (2)
+ 2011 (11)
Януари '11 (3)
Февруари '11 (1)
Юли '11 (1)
Август '11 (2)
Септември '11 (1)
Октомври '11 (3)
+ 2012 (19)
Януари '12 (3)
Февруари '12 (1)
Март '12 (1)
Април '12 (2)
Май '12 (3)
Юни '12 (1)
Август '12 (2)
Септември '12 (1)
Ноември '12 (3)
Декември '12 (2)
+ 2013 (6)
Март '13 (3)
Юни '13 (1)
Август '13 (1)
Октомври '13 (1)
+ 2014 (7)
Март '14 (1)
Април '14 (1)
Юни '14 (1)
Септември '14 (3)
Декември '14 (1)
+ 2015 (5)
Януари '15 (1)
Март '15 (3)
Май '15 (1)
+ 2016 (5)
Юни '16 (1)
Юли '16 (1)
Септември '16 (1)
Ноември '16 (1)
Декември '16 (1)
+ 2017 (1)
Август '17 (1)


Последни коментари:

23 Jun 2024, 18:01 от anrieff
21 Jan 2020, 09:01 от anrieff
20 Jan 2020, 11:38 от Владо
30 May 2017, 02:02 от anrieff
26 May 2017, 01:00 от Mathew
30 Mar 2017, 13:59 от antfarmer


Valid XHTML 1.0 Strict

Blogroll:

linkТимур и неговите командоси
linkivanatora
linkБезброй математици...
linkJoel on Software
linkRidiculous Fish
linkXKCD blag