сряда, 11 ноември 2009 г.

Аз съм много тъп, но поне се старая

Много, много съм се чудил защо толкова малко хора се интересуват от техника и математика, защо когато говоря хората ме гледат като извънземен, защо имам чувството че съм заобиколен от идиоти, и т.н.

Не е само математиката и програмирането. Почти всичко трудно предизвиква подобна реакция у хората. Съществува инстинктивен страх от каквото и да било извън познанието ни. Когато видиш нещо което не разбираш, имаш подсъзнателен страх от него. Когато видиш нещо впечатляващо, не си казваш "Трябва да пробвам това", а по скоро "Няма и да се опитам, защото най вероятно не съм добър в това". Не е само мързелът, или невежеството. Нещо липсва у повечето хора, което го има у мен.

На всички които са се чудили защо съм толкова странен и различен: Интересувам се от всичко и не ме е страх от непознатото. Прекомерно любопитство. Това е. За това се занимавам с компютри, математика, за това се опитвам да се науча да пиша с този блог, за това се мъчих да се науча да рисувам, за това уча и за това се съм замислен постоянно, защото съм любопитен, а не защото съм умен или имам някакви особени таланти(любопитството е ЕДИНСТВЕНИЯ ми потвърден талант, всичко останало е спорно).

Чудих се защо повечето хора не са като мен в това отношение. Нямам никаква представа. Отне ми доста време докато осъзная какво точно ме прави различен, доста ще ми отнеме да разбера ЗАЩО повече хора не са различни като мен.

Хората ме мислят за антисоциален, защото прекарвам толкова време пред компютъра, и са може би прави. Но едно от предимствата на интернета е че вече не сме ограничени географски. За първи път се почувствах у дома в Hacker News. За първи път открих огромно количество хора, по умни от мен, които се интересуват от същите неща като мен. Тези които се интересуваха от различни неща, споделяха интересите си и заинтересуваха и други хора с познанието и опита и с ентусиазма си.

Любопитството е едно от най важните хакерски умения, ако не си любопитен, най доброто на което може да се надяваш в софтуерния бранш е да си тренирана маймунка, да седиш и да се пощиш по цял ден и да правиш номера по команда. Всъщност без любопитство и ентусиазъм човек е тренирана маймуна в КАКВАТО и да е човешка дейност, като се замисля. Циникът в мен казва че имаме нужда от маймуни, но хората са по интересни за разговори.

Hey look! talking monkey. HaHa

-Johny Bravo

събота, 7 ноември 2009 г.

Книги

На скоро си направих facebook акаунт, и ако питате мен, все още предпочитам twitter, но това е друг въпрос :D Забелязах две неща за секцията ми за любими книги. Първо, почти отсъства фикция, и второ, като изключим SICP, всички други книги съм ги прочел от корица до корица, което е необичайно за мен.

Хм. извода е че явно книги които не са ми любими, не ги завършвам, и разбира се SICP е изключението от това правило, по обясними причини, най вече поради факта че съм гледал лекциите поне 2-3 пъти. Да видим какво съм писал в тая секция:

Zen And The Art Of Motorcycle Maintenance(Дзен и изкуството да се поддържа мотоциклет), от Робърт Пърсиг. Това беше четивото ми за лятото, и честно казано това е най любимата ми книга. Дори си препрочетох 26-та глава, и смятам да я препрочета още няколко пъти. Книгата няма много общо с програмирането. Въпреки че в началото се казва и че няма много общо с мотоциклетите, или със дзен будизма. Книгата просто използва поддръжката на мотоциклет като пример за нещо което може да бъде извършено добре, или зле, т.е. с или без качество, което е и централната идея на книгата, изследване на това какво е качеството. Споменатата 26-та глава се занимава с идеята за gumption, дума която може да бъде преведена като находчивост или ентусиазъм за дадена работа. Според главата, имаме резервоар от гъмпшън с който вършим качествена работа, и има определени гъмпшън капани, които ни изсмукват гъмпшъна и ни пречат да вършим работата си добре. Книгата изгражда цяла нова метафизика, но мисля че това което получих от нея беше именно по добро разбиране на връзката между техническия и художествения свят(наричани в книгата класически и романтичен поглед към света), както и идеи за това как и защо да търся качеството в работата си. Определено си заслужаваше 15-те кинта които дадох, и времето което отделих за тази книга.

Следващата в списъка ми е "Изкуството на войната" От Сун Дзъ. Аз съм особено обсесивен човек. От време на време ме хваща някаква идея и искам да науча колкото се може повече за тази област, и тогава в един момент, ентусиазмът ми изчезва и се захващам с нещо друго. Преди няколко години, това беше военна история и разбира се военна авиация. Бях обсебен от авиацията, физиката, механиката и технологията, и съвсем естествено този интерес прерасна в цялостен интерес в историята на войната и военните технологии и разбира се стратегии и тактики. Любимите ми компютърни игри бяха lock on и starcraft, т.е. военен авио-симулатор и военна стратегия. Съвсем естествено беше за мен да потърся нещо по задълбочено върху теорията на войната. В тази книга е докосната повърхността на толкова много и разнообразни теми свързани с войната, икономика, политика, психология, физика, дори математика и абстрактна логика и разбира се философия. Изучаването в дълбочина на тези теми със сигурност е доста важно както в истинската война, така и в хобито ми: стратегически игри. Макар и да нямам много време да играя, редовно гледам старкрафт мачове и съм удивен от количеството познание от тази книга която може да бъде приложена върху компютърна игра, създадена векове след писането и.

Следва Структура и интерпретация на компютърни програми(SICP) От Хал Абълсън и Джерълд Съсмън(или сусман, както ви е по удобно) Вече споменах че не съм чел книгата. Чел съм отделни части от нея. Гледал съм всички лекции поне по 2 пъти. Чел съм доста от кода, написан освен на scheme, така и на други езици. Научил съм толкова много от тези лекции. Дори няма да говоря за книгата, защото едва ли някога ще успея да я прочета.

В началото бе командния ред(In the beginning was the command line) от Нийл Стивънсън. Есето е написано през 1999, и според автора, днешно време то е остаряло, заради появата на Mac OS X, но все пак все още е интересно четиво, а и когато го четох ме остави с интересни мисли в главата. Мисля че на няколко пъти съм се опитвал да напиша есе вдъхновено от някой от идеите обсъждани в него. Още от самото начало на интереса ми към линукс се интересувах и от причините поради които толкова малко хора го използваха. Това есе ми даде само частичен отговор, но все още не разбирах, за това и исках да напиша свое есе по темата, защото имаше нещо което още не разбирах. В крайна сметка мисля че днешно време знам отговора благодарение на първата книга в този списък, където изрично се търси отговор на този въпрос. Както и да е, намерих версия на есето с допълнителни бележки, които май са нещо като свеж поглед върху проблемите с които се занимава то, т.е. взима под внимание променения технологичен свят, въпреки че бележките са писани само 5 години след излизането на му :D Смятам да го прочета скоро.

Hackers and painters(Хакери и художници) От Поул Греам. Удивителна колекция от есета. Прочетох всички есета от paulgaham.com и по късно разбрах че всъщност доста от тях са били публикувани в книга, така че прочетох тази инцидентно :D Мога да говоря с часове за това колко съм научил от тези есета. На практика всичко което знам за писането на есета знам от стила с който е написана тази книга. Първите ми насоки в света на програмирането и разбирането на това което се опитвам да правя дойдоха именно от есетата на PG. Също така, аз очевидно съм от новото поколение Lisp програмисти вдъхновени от PG, които учат лисп само защото PG казва че е готин език. И за това се захванах със Scheme, а сега и с Clojure. Повечето есета съм чел повече от веднъж, а някой дори и съм превел на български(разбира се с много грешки :D).

The art of Unix programming (Изкуството на Unix програмирането) От Ерик Реймънд. Когато започнах да се занимавам с линукс, именно писанията на ESR ме насочиха към програмирането, а този труд в частност ми обясни историята и философията на Unix. Нищо повече. Това е просто задължително познание, без значение дали го научавате от точно тази книга, или просто знаете много за Unix от опит. Също така, това е една от малкото книги които имат думите "The art", както и думата "programming" В тях, без това да е маркетингов булшит.

Имам много книги които съм изпиратствал през годините. Повечето от тях няма дори да започна да чета. Няма да навляза подробно в повечето които зачета, а тези на които им посветя повече време, едва ли ще ги завърша напълно, а от тези които завърша е още по малко вероятно да ги прочета отново, или дори само да препрочета по интересните части. Горе са някой примери за книги които наистина са ми харесали.

Повечето от книгите които захващам са технически книги от типа на "Научете Х". Въпреки че са лесни за четене, никога не съм завършвал "For dummies" книга, и само някой от книгите на O'Reilly съм успявал да прочета почти до край. Тези книги са полезни, но доста малко от тях успяват да променят начина ми на мислене достатъчно че да ми харесат повече от обикновени онлайн туториъли. Именно "For dummies" книгите страдат от недостатъка че не ме карат да мисля достатъчно, за това и вече ги избягвам, дори и ако само искам да ги ползвам за бързи туториъли, не са добри дори и за това.

В момента чета Coders at work, на Питър Сайбъл, надявам се книгата да може да влезе в този списък, и въпреки че съм прочел само 3 от интервютата, вече имам чувството че ще я прочета цялата и дори ще си препрочитам някой части. Трудно се намират такива книги.

петък, 6 ноември 2009 г.

Малииии, то станало ноември ве

Хм, май се олях. Нямам какво да правя точно в този момент и за това на бързо ще начаткам този блог пост. Студентския живот е ок, предполагам, като изключим факта че трябва да уча С++. Математиката е поносима и дори линейната алгебра ми харесва повече от колкото очаквах. Не мога да кажа същото за анализа.

Заради факта че ми се налага да уча С++ и 2 вида математика, може да си представите колко не ми се програмира вечер в къщи. На няколко пъти успях да седна пред компа през уйкендите и да попиша малко "истински" код, но ако още веднъж трябва да реша някоя смотана задача където да трябра да "нарежа" дадено число на цифри използвайки %, ще откача и ще започна да избивам хора около мен.

В момента съм отново в нещо като дупка относно на къде си насоча вниманието, и отново имам много идеи. Едната е да се концентрирам повече върху web разработване с Clojure, но след като написах 1 приложение мисля че ще чакам документацията на clojure фреймуърките да се подобри. Gui програмите са опция, но ако ползвам Clojure, трябва да ползвам някоя от Java библиотеките, което е ъъъгххх, пфф. Другия вариант е да се върна при Python, което е добра идея, освен с GUI, от известно време ми идват и идеи за 2D игрички, което означава че може НАЙ накрая да науча Pygame, или пък направо да се захвана с java bindings-ите за SDL, които намерих в нета и да се опитам някакси да ги ползвам с Clojure, въпреки че въобще не харесвам да ползвам java библиотеки за такива неща. Другия вариант който доста рано заебах беше идеята ми да понауча нещо за системното програмиране и Unix+C. Като цяло идеята е интересна, понеже така или иначе уча С/С++ в университета, може да се занимавам в къщи, но бързо осъзнах че всъщност мразя С. Хм, май не го осъзнах бързо, защото се опитвах да науча чудото в продължение на доста дълго време и още не знам как е възможно някой да програмира ИСТИНСКИ програми на това нещо. Просто съм прекалено тъп за чистото С явно.

Уау, най накрая блог пост. Предполагам че това е нещо като постижение :D

понеделник, 12 октомври 2009 г.

Програмиране за ламери

Блогът ми тръгва в нова насока. След като прекарах известно време като студент в Шуменския университет и разбрах горе долу какво точно ще правя до края на годината, реших да фокусирам вниманието на блога ми към нещата които трябва да търпя в качеството си на един от малко по- компетентните в курса ми.

Какво точно означава това? Ами най вече че повечето от кода ми ще е написан на С (НЕЕЕЕЕЕЕЕЕЕЕЕ), и доста от него ще решава тривиални проблеми като за тъпи първокурсници(като мен :D). Възможно е и да пиша малко за математиката която учим, или която може да понауча самостоятелно, но математиката не ми е силна страна, за това ще се въздържа от нея.

С цел прилично поведение(да, четете това правилно) ще се въздържам от оплаквания, както правех когато бях в даскало, това ще го правя в twitter :D (погледни sidebar-а).

Разбира се ако се занимавам с някоя нова и интересна технология, която не я учим, ще блогвам и за това. Не смятам да превръщам блога си в място за постване на домашни на С. Също така С няма да измести напълно Python и Clojure от този блог, просто ще си намери нисша.

Също така си запазвам правото да пиша за неща които не са свързани с технологии или учене или такива неща. Рандом булшит-а няма да изчезне напълно от този блог. Надявам се да съм по активен вече.

сряда, 23 септември 2009 г.

Върнах се(май?)

Блогът ми не го убих официално, но съдейки от статистиката в google analytics, на никого не му пука. Реших да го съживя малко и да се опитам поне този път са набера някаква аудитория.

Започваме с новините:
Станах студент по информатика в шуменския университет. Поносимо е.

Успях да прочета книга която не беше за програмиране!!(Дзен и изкуството да се поддържа мотоциклет, за нея ще имам отделен пост)

Написах първото си Clojure macro, доста е грозно. Скоро ще почна да поствам и код :D

Този пост НЯМА да има нищо важно/интересно в него, така че го поствам само за да отчета активност.

вторник, 7 юли 2009 г.

Clojure

Обичам лисп. Още веднага след като изгледах първите лекции от SICP серията, осъзнах че обичам функционалното програмиране, и обичам lisp езиците, и в частност scheme. Елегантноста на минималистичния синтаксис, мощните абстракции, простотата с която могат да се изразяват сложни идеи, това всичкото в един невероятно малък език. Scheme може да се научи буквално за часове, Scheme е единствения език който заслужава книга "Learn Scheme in N days", всички други подобни заглавия вероятно ви булшитват, тъй като е невъзможно да научиш php да речем за N часове. Всъщност наистина ИМА книга ма scheme наречена Teach Yourself Scheme in Fixnum Days, като до колкото разбрах fixnum е малко цяло число(или нещо от сорта). Книгата е САМО 100 страници, това са 50 листа!

След като обичам лисп и обичам функционалното програмиране, нормално е да се опитам да пиша програми на scheme, така и направих, поне за кратко. Така и не успях да напиша нищо особено дълго или впечатляващо. Но scheme си изигра ролята, заедно със гореспоменатите лекции, овладях основите на функционалното програмиране, разбрах как работят абстракциите, научих се как да създавам рекурсивни алгоритми, разбрах да разграничавам абстрактния модел по който работи дадена програма от реалния начин на работа(за да мога да разбирам по големи и сложни програми) и се научих да гледам на кода от високо, да мисля по абстрактно. Не е зле за език който научих за 1 седмица. След всичко това, така и не получих това което исках, малък език на който да програмирам бързо и лесно. Scheme е удобен език за обучение, но ако искаш да го ползваш "In real life"TM трябва да си наистина посветен на идеята. Няма да влизам в детайли относно това какво точно ме отказа от scheme, но като цяло леснотата с която писах код на Python(първия ми език), така и не беше достигната от scheme, което беше разочароващо.

От известно време се интересувах от clojure, диалект на lisp създаден специално за jvm-а предназначен за паралелно програмиране. Езикът има повечето предимства на традиционните лисп диалекти, но скъсва връзките с някой исторически остатъци, които са в ядрото на "старите лисп-ове", или поне така казват всички в нета :D Езикът набира популярност, но въпреки че отдавна го следя, едва на скоро имах време да го науча. Scheme опитът ми беше полезен, тъй като аз напрактика вече знаех по голямата част от езика, не ми отне повече от седмица да овладея основите.

Няма да обяснявам в подробности какво точно прави следния код, просто го поствам за да видите как изглежда Clojure по принцип:
(defn sort-banknotes [sum]
(loop [sum sum banknotes [50 20 10 5 2 1] sorted []]
(if (or (= sum 0)
(= (count banknotes) 0))
sorted
(recur
(mod sum (first banknotes))
(rest banknotes)
(conj sorted (int (/ sum (first banknotes))))))))

(println (sort-banknotes 394))


Кодът е прост, ето какво прави на бързо: разполагайки с банкноти от по 50,20,10,5,2 и 1 лв., за произволна сума трябва да се определи по колко банкноти от всеки номинал са необходими, като се предпочитат по едрите банкноти. Ето еквивалентната програма в c++ за сравнение:



#include<iostream>
using namespace std;

int bn[6]={50,20,10,5,2,1};
int sbn[6];
int sum;
int i;
int main(){
cout<<"summa za izchislenie=";
cin>>sum;
for(i=0;i<6;i++){
sbn[i]=sum/bn[i];
sum=sum%bn[i];
cout<<bn[i]<<"=>"<<sbn[i]<<endl;
}
}

В следващия ми пост ще говоря за Compojure, лека web framework за clojure, очаква се да е по интересно, ще има повече код поне :D

четвъртък, 4 юни 2009 г.

Малко промени

Ако някой от вас е виждал стария блог, това е същия! Смених URL-а, както и скина и описанието. Това е по дескриптивно.

Това означава ли че се завръщам към редовното блогване? Не съм сигурен, със сигурност ще блогвам по често от преди, но дали ще е редовно както правих преди 1 година(1 пост на 2 дена почти), не знам, Със сигурност се надявам, но това не е съвсем същото нещо, нали?

Това което знам е че вече имам повече неща за които мога да блогвам, както и повече време за това. Само времето ще покаже. А междовременно, да зема да обновя някой работи.