Times are tough. Everyone needs to spend most of their time scavenging food, warding off zombies and searching for survivors, so I’ll be brief with my obligatory, almost-traditional new year’s summary post.
This will be in stark contrast with how freaking long this year has been for me, too. Long and very eventful, especially in the travel, relocation and job department. Suffice it to say, I switched countries more than once: from Poland to Netherlands, and then directly to Switzerland. Even with (supposedly) free movement of people in and around EU, this is still quite a cumbersome and time-consuming process.
When it comes to work, I discovered that I’m not actually very fond of squeezing UI and logic into tiny pocket devices. Distributed, server-side systems are turned out to be much more interesting and important to me, so I adjusted my job choices accordingly. And I like it a lot, especially since I started working in that hot new Internet startup ;)
Over the year, I’ve been trying to keep up with posting interesting stuff on regular basis. Although sometimes reality got in the way, I think I managed to publish at least a few nice pieces. I’m especially satisfied with:
this
keywordEnd of 2012 also marks the period of (little over) a year when I’m writing this blog in English. As I’ve expected, making the language switch didn’t really have a negative impact on readership numbers.
However, I’m still getting occasional complaints about this very move, which is rather astonishing at this point. Nevertheless, I’ve spent some time thinking about this issue, the ways to reach out to non-international audience. Not promising anything at this point, but maybe in 2013 there will be something for you too :)
In meantime, enjoy the new year!
Also known as Obligatory New Year’s Post.
It was quite a year, this 2011. No single ground-breaking change, but a lot of somewhat significant events and small steps – mostly in the right direction. A short summary is of course in order, because taking time to stop and reflect is a good thing from time to time.
Technically, the biggest change would be the fact that I’m no longer a student. Attaining MSc. some time in the first quarter, I finished a five year-long period of computer science studies at Warsaw University of Technology. While there are mixed views on the importance of formal education, I consider this a major and important achievement – and a one with practical impact as well.
My master thesis was about implementing a reflection system for C++. Ironically, since then I haven’t really got to code anything in this language. That’s not actually something I’m at odds with. For me, sticking to just one language for extended period of time seems somewhat detrimental to development of one’s programming skills. On the other hand, there goes the saying that a language which doesn’t change your view on programming as a whole is not worth learning. As usual, it looks like a question of proper balance.
This year, I’ve got to use a handful of distinct languages in different contexts and applications. There was Java but mostly (if not exclusively) on the Android platform. There was JavaScript in its original incarnation – i.e. on client side, in the browser.
Finally, there was Python: for scripts, for cloud computing on Google App Engine, for general web programming, and for many everyday tasks and experiments. It seems to be my first choice language as of now – a one that I’m most productive in. Still, it probably has many tricks and crispy details waiting to be uncovered, which makes it likely to grab my attention for quite a bit longer.
Its status always has contenders, though. Clojure, Ruby and Haskell are among languages which I gave at least a brief glance in 2011. The last one is especially intriguing and may therefore be a subject of few posts later on.
2011 was also a busy year for me when it comes to attending various software-related events. Many of these were organized or influenced by local Google Technology User Group. Some of those I even got to speak at, lecturing on the Google App Engine platform or advanced topics in Android UI programming. In either case it was an exciting and refreshing experience.
There were also several other events and meet-ups I got to attend in the passing year. Some of them even required traveling abroad, some resulted in grabbing juicy awards (such as autographed books), while some were slightly less formal albeit still very interesting.
And kinda unexpected, too. I learned that there is bunch of thriving communities gathered around specific technologies, and they are all just around the corner – literally. Because contrary to the stereotype of lone hacker, their members are regularly meeting in real life. Wow! ;-)
While saying ‘Hello!’ is entirely appropriate here, it is obviously not my first post on this blog. Not by a long shot: there are exactly 555 others that preceed this one, scattered across the timeframe of more than four years. They just happen to be written in slightly less widespread language and therefore reaching a significantly smaller audience. But even though technically I’m nowhere near a newbie when it comes to devblogging, I kinda feel like one now, after deciding to make a switch to English. Therefore it seems like a good idea to warmly greet everyone reading this.
So… hello there!
If it was truly an opening, I’d proceed to outline the purpose of this blog, explain what type of posts you can expect here and what subjects I’m planning to cover on (hopefully) regular basis. But although it is “just” a major checkpoint, it seems like a good idea to have this kind of introduction anyway. Not only for any newcomers that might have accidentally strolled around ;)
I called it a dev blog, and for good reason. Programming or coding or writing software – however you name it, that’s what I’m mostly going to cover here. More often than not, it will be related to my own experiences with diverse set of technologies, libraries, tools, frameworks and – most importantly – languages. The emphasis is intentional, because I’m quite a fan of programming languages in general: their semantics, unique features, the way they organize the structure of code written in them, and how they compare to each other. Therefore you can expect to see such topics being covered here; hopefully they won’t incite too much flames :)
Besides purely technical stuff, I will sometimes attempt to look at slightly bigger picture, going up to the “meta-level” of programming art. This includes any practice which aims to strengthen positive traits of one’s code: readability, flexibility, efficiency, etc. I might also ponder less explored (and usually more vague) topics, such as the cognitive process of turning ideas into algorithms, structures and actual code – but usually without going too far on the abstract side.
Of course I won’t entirely avoid posts that cannot be easily put into those two buckets. But even though they might be somewhat off-topic, I have a feeling they will be mostly related to IT anyway. What’s really interesting besides that, anyway? ;-)
To nie była łatwa decyzja. Dość powiedzieć, że odwlekałem ją naprawdę bardzo długo. Nie bez związku był tu fakt, że wiąże się ona z nietrywialną ilością dodatkowych rzeczy do zrobienia – a przecież powszechnie wiadomo, że pracowitości raczej nie słynę :) Jestem jednak przekonany, że to już najwyższy czas.
Niniejszym informuję zatem, że oto oficjalnie zmieniam język, w którym piszę tego bloga. Kolejne notki będą już po angielsku. Być może nie absolutnie wszystkie, ale wszelkie wyjątki będą – właśnie tak – wyjątkami. Podobnie będzie też oczywiście z całą resztą interfejsu strony, którą to mam nadzieję stopniowo dostosować w ciągu najbliższych (tygo)dni.
Jeśli w swoich przewidywaniach nie mylę się koszmarnie, to krok ten nie powinien być dla większości czytających żadnym wielkim zaskoczeniem. Mógłbym tutaj rozpisać się na temat uniwersalności języka angielskiego wśród programistów, konieczności jego praktycznej znajomości, i tak dalej. Mógłbym, ale nie widzę w tym żadnego sensu – to są po prostu oczywistości, z którymi nawet nie ma jak polemizować. Dlatego mogę pewnie zaryzykować stwierdzenie, iż “wszyscy” wiedzieli, że i w przypadku tego bloga przejście na angielski jest wyłącznie kwestią czasu.
Istnieje oczywiście jeden główny powód tej zmiany, jakim jest możliwość znacznego poszerzenia grona odbiorców – żeby nie powiedzieć brzydko ‘grupy docelowej’ ;) Z tym zaś wiąże się też szereg pozytywnych konsekwencji, jak choćby o wiele większa swoboda w doborze tematów – zwłaszcza tych najbardziej interesujących, czyli stricte technicznych. Rozumowanie jest tu proste: w przepastnym oceanie światowego Internetu każda porcja praktycznej wiedzy znajdzie swojego odbiorcę. Gdy ograniczamy się do polskiej części sieci, nie jest to już takie pewne.
Drugą ważną przyczyną jest też to, iż pisanie po polsku na tematy okołokoderskie nie jest wcale łatwym kawałkiem chleba. Wymaga to bowiem ciągłego szukania kompromisów między precyzją opisu a jego długością, czytelnością, a często i językową poprawnością. Nierzadko trzeba tu też przecierać szlaki, próbując znaleźć zgrabne (i krótkie!) tłumaczenia dla rzadziej spotykanych pojęć technicznych. Nie w każdym przypadku jest to zresztą możliwe (“shader”?…) i wtedy pozostaje jedynie potraktować daną frazę kursywą. Ostatnio zresztą przytrafiało mi się to coraz częściej.
Ufam, że ta mała rewolucja zostanie przyjęta pozytywnie, albo chociaż z powściągliwym zrozumieniem :) Jednocześnie przepraszam z góry tych, przed którymi buduję właśnie językową barierę – mam nadzieję, że uda wam się szybko ją przekroczyć.
Do zobaczenia po drugiej stronie!
Podobno dzisiaj – czyli 31 sierpnia – obchodzimy międzynarodowy BlogDay. Piszę ‘podobno’, bo oficjalna strona tej inicjatywy pamięta jeszcze zeszły rok, ale chociażby ruch na Twitterze sugeruje, że nie jest to zupełnie zapomniane wydarzenie. A skoro tak, to pozwolę sobie również je zauważyć :)
Jego celebracja w założeniu polega na napisaniu notki, w której polecamy swoim czytelnikom pięć innych blogów – na przykład takich, które regularnie czytujemy. Nic prostszego, prawda? Wystarczy przecież spojrzeć na listę w swoim czytniku RSS – i już…
Cóż, niezupełnie – a przynajmniej nie w moim przypadku. Chociaż bowiem lista nie jest pusta, to nie wydaje mi się, żebym mógł się nią jakoś specjalnie chwalić. Widnieją na niej głównie klasyki, które powinny być wszystkim znane – takie jak Coding Horror czy Joel on Software – lub wyspecjalizowane blogi poświęcone wąskiemu tematowi – jak blog Nicka Johnsona o Google App Engine. Nie widzę specjalnego sensu w szczegółowym opisywaniu któregokolwiek z nich. Mógłbym co najwyżej wspomnieć o rzadko aktualizowanych perełkach w stylu Linux Hater’s czy Hyperbole and a Half, ale wolałbym nie obdarzać was zbyt wielką liczbą narzędzi wspomagających prokrastynację ;)
Dlatego też postanowiłem odwrócić “tradycję” Dnia Blogowania i poprosić czytelników o polecenie innych blogów podobnych do niniejszego – lub nawet zupełnie odmiennych, o ile tylko zachowamy ustalone proporcje (4 do 1). Przy odrobinie szczęścia długość powstałej w ten sposób listy interesujących blogów powinna o wiele rzędów wielkości przekroczyć 5 :)
Notka rozpoczyna się od stwierdzenia jednego lub kilku raczej oczywistych faktów, których autor w dość sztampowy sposób używa w celu rozpoczęcia tematu. Najczęściej przywołuje w tym celu swoje nieodległe w czasie doświadczenia związane z tymże tematem, które czasami prowadzą do mniejszej lub większej (częściej mniejszej) zmiany przekonań. Reszta pierwszego paragrafu zazwyczaj podporządkowana jest dobrnięciu do jego końca w sposób, który sprawi wrażenie spójnego wywodu. Jednocześnie jednak sam koniec jest celowo trochę kontrastowy, co ma na celu lekkie zaskoczenie czytelnika i przekonanie jego podświadomości, że lektura reszty może nie być wcale taką stratą czasu na jaką wygląda.
Środkowa część służy zrazu dalszemu rozwinięciu opisu zjawiska, którym to w tym przykładzie jest pewien specyficzny rodzaj humoru. Często jest to wspomagane odpowiednim formatowaniem tekstu, aplikowanym zazwyczaj do pojedynczych słów, które autor z jakiegoś dziwnego powodu uważa za ważne, zwykle zresztą błędnie. Nierzadko są to jego własne wymysły terminologiczne (jak choćby określenie wspomnianego rodzaju humoru jako metasatyry), wyróżnione formatowaniem tylko dlatego, iż bez niego nikt nie zwróciłby na nie najmniejszej uwagi. Byłoby to zresztą niezwykle pożyteczne, jako że ich adekwatność pozostawia zwykle wiele do życzenia.
Następnie przytaczane są różne argumenty lub przykłady tudzież elementy opisywanego zjawiska, wybrane zazwyczaj spośród tych, do których prowadzą linki z trzeciej strony wyników wyszukiwania w Google (albowiem powszechnie wiadomo, że wszyscy zatrzymują się na pierwszej, więc w ten sposób uzyskuje się gwarancję oryginalności źródeł). Pozycje te bardzo często uformowane są w postać listy wypunktowanej, ponieważ nadaje im ona pozory dobrze zorganizowanej struktury (co natychmiast podnosi wiarygodność) przy jednoczesnym unikaniu zbytniego formalizmu, nieodłącznej cechy listy numerowanej.
Ostatni paragraf lub dwa są aż do bólu przewidywalne, gdyż trudno spodziewać się tu czego innego niż podsumowania. Wskazuje ono na główną linię rozumowania z części środkowej lub też zbiera wspólne cechy podanych przykładów, takie jak punktowanie powtarzalnych, szablonowych form imitowanych przez metasatyrę przy jednoczesnym dokładnym trzymaniu się tychże form. Jeśli autor ma akurat dobry dzień, uda mu się celnym zdaniem wskazać sedno zagadnienia (a więc efekt komiczny spowodowany paradoksalnością wspomnianych cech tego humoru), jednakże zawsze będzie to inne zdanie niż to, które w jego zamyśle miało takim być. Definitywne zakończenie czytelnik przyjmuje z westchnieniem ulgi, aczkolwiek zupełnie bez zaskoczenia, bowiem było ono dla niego od początku całkiem oczywiste.
Niekiedy notka uzupełniona jest o komentarz małym drukiem, o treści która w jakiś pokrętny sposób odnosi się do całości notki. Na pewno aczkolwiek nie wspomina ona o nadużywaniu odrobinę zbyt wysublimowanego języka oraz występujących gromadnie, w gruncie rzeczy niepotrzebnych linkach do Wikipedii.