March 17, 2018

Review: Java Concurrency in Practice

I was recently assigned to a new project at work, which requires some concurrent programming. I’ve long put off investing in any formal Java programming texts, partly out of thriftiness and partially because none of the professional programming I’ve done to date required a formal education/reading of relevant texts to avoid writing completely incorrect code. Usually in line-of-business application development, a sub-optimal solution is not completely incorrect; at worst, it wastes CPU cycles. However, when it comes to concurrent programming, there’s three options: ...

January 9, 2016

How Programming is Like Cooking

Peter Naur, famous in the programming world for his contributions to ALGOL and the Backus-Naur Form (BNF) notation for expressing grammars, passed away last week. (For those who are not in the programming world, ALGOL’s grammatical syntax inspired most of today’s most popular programming languages, like C, C++, Java, and Python). As a very young millennial programmer, I’d of course heard Naur’s name from the BNF notation, but didn’t really get to appreciate just how prescient his work was at the time. ...

December 24, 2013

Software Engineering and Computer Science

I’m planning on this post being the first in a series about my naïve thoughts about the significance of Software Engineering as an undergraduate with little so-called real-world experience. Stay tuned for followup posts, which I’ll post back here. For the past several decades, computer programming has been done in special programming languages which can be either interpreted or compiled (translated) into a form which is natively comprehensible to computers (known as machine code). The original programming languages (the Assembly family of languages specifically) were very simple, used for the simple purpose of avoiding the tedium of needing to program directly in machine code, but which otherwise required the same effort and had the same exact meaning as the machine code it translated to. Later on, slightly more powerful languages were created which could encapsulate more machine code into less words which in turn more closely resembled English. This eventually culminated in the development of Object-Oriented and Functional programming languages, which allow programs to be phrased in terms of programmer-defined nouns and verbs — thus giving birth to a large part of Software Engineering. ...

© Jeff Rabinowitz, 2025