Philosophy of Software Design overview (and rants)

Recently I spent some time reading this book that a coworker suggested. My overall feeling is that it’s a good book. The first 40% of pages can be triggering (makes some strong statements), but then some of those are rejected later, as expected in a philosophy book 🙂

My take is that I think this book should be literally read in a group. The best outcome of it was just discussing it with my coworkers or ranting about it (find <rant> in this post).

Continue reading “Philosophy of Software Design overview (and rants)”

The developer experience of tackling PHP internals

Inspired by Python’s functools.partial, I wanted to bring partial function application into PHP. This is already supported by Haskell, and other languages as well. It is similar to the concept of Currying. Partial function applications are a very powerful concept, and as such, it provides a new way to build abstractions.

Recently, I decided to spend some time working with the Zend API. In this blogpost, I will document my journey.

Continue reading “The developer experience of tackling PHP internals”

Impressions of my first Daily Chess game

I recently played my first Daily Chess game with one of my friends on Chess.com, and I noticed that Daily Chess is a perfect format for improving one’s chess skills. It basically gives you 24 hours to make a move.

I loved the concept of conditional moves, which allow you to define a few “if-then”s depending on the opponent’s path.

All this gives you much time to do analysis without the time pressure. The most important bit is that you make a move when you feel in the mood, and each move you make can be treated like its own puzzle – this allows you to maximize your performance where for example, my accuracy was 88.1%.

1. e4 e5 2. Nf3 d6 3. b3 Nc6 4. d4 exd4 5. Nxd4 Nxd4 6. Qxd4 Qf6 
7. Qxf6 Nxf6 8.
Bd3 Be7 9. Bg5 h6 10. Be3 O-O 11. Nd2 d5 12. e5 Ng4 13. h3 Nxe3 14. fxe3 Bb4 15.
O-O-O Ba3+ 16. Kb1 f6 17. Nf3 fxe5 18. Nxe5 Re8 19. Ng6 Re6 20. Rhf1 Bd7 21. Bf5
Rf6 22. Bd3 Rxf1 23. Rxf1 a6 24. e4 dxe4 25. Bxe4 Bb5 26. Bd3 Bxd3 27. cxd3 Rd8
28. Kc2 Rd5 29. Kc3 Rg5 30. Nf4 Rf5 31. b4 a5 32. bxa5 Bd6 33. g3 g5 34. Rb1
gxf4 35. gxf4 Rxa5 36. Rxb7 Rxa2 37. Rb5 Bxf4 38. Rf5 Bd6 39. Rh5 Kg7 40. Rh4
Rg2 41. Kd4 Kg6 42. Ke4 Kg5 0-1

Beyond Software Engineering

My team lead once asked me a very simple question – “How does Boro compare today, to Boro a few years ago”?

(One of the things that a person should practice is applying the Socratic method. By asking questions like the one above, people usually get into thinking mode (like myself in this case), and they write/do stuff based on the question 🙂 Most folks in my current team have mastered the Socratic method.)

My answer was brief; working on the full-time hiring team was the biggest contributor. However, one day while I was driving*, I thought of a bit more general question: “How does one go beyond software engineering?”, put a little bit more thought into that question, and I want to share my thoughts here.

* We can debate whether the Socratic method triggered this or it was random 🙂

Continue reading “Beyond Software Engineering”