Learning Clojure - Implementing cat
As I wrote previously, I am learning the Clojure programming language as one of my personal Learning Projects.
Previously, I presented my implementations of echo
, the classic Unix command-line utility. Next on the list is cat
, a useful utility for writing information out to the screen from a file or the standard input. Well, technically it writes to the standard output, but the default destination for the standard output is the screen, so it works out the same in the end.
Now, let's take a look at the code:
Continue reading →Learning Clojure - Implementing echo
As I wrote previously, I am learning the Clojure programming language as one of my personal Learning Projects.
Previously, I presented my implementations of true
and false
, the classic Unix command-line utilities. Next on the list is echo
, a useful utility for writing information out to the screen. Well, technically it writes to the standard output, but the default is that that is the screen, so it works out the same in the end.
Now, let's take a look at the code:
Continue reading →Learning Clojure - Implementing true and false
As I wrote previously, I am learning the Clojure programming language as one of my personal Learning Projects. Naturally I started with hello world because there are a ton of examples of hello world available and just being able to get it working proves that you're gotten your development environment setup correctly.
Now that I have moved past hello world, I am ready for the first programs that I will have to write myself. No copy and paste of a complete working version, or because I am using lein
I get a copy supplied everytime I start a new project. So, it is time to write the simplest programs that it is possible to write in almost every programming language I've ever used, the equivalents of the Unix utilities true
and false
. These are so simple to write because they do nothing except exit and pass an integer value back to the operating system. In the Unix world, where these come from, the convention is that a zero indicates success and a non-zero indicates failure, with again the convention being that the false
utility returns a one. (Naturally, other utilities are free to return any non-zero value they wish, but false
is going to give you a one.)
A challenge when setting up the projects was finding that Clojure does not allow language keywords as filenames, so true.clj
and false.clj
were not options. Necessity brings out invention, so I named them cljtrue.clj
and cljfalse.clj
. Not the most exciting names, but they work. (That's actually pretty good considering that I'm a graduate of the Jocko school of naming things!)
Working Code Trumps Everything
Computer programming is such a young discipline that it is still very fast moving. New techniques and practices are being discovered regularly. (Unfortunately, also because of the rapid progress, many techniques and practices are lost in the rush and have to be rediscovered on a regular basis.) So many good things. Procedural, object and functional programming paradigms, virtual machines, bytecode, virtualization, concurrency oriented programming, grid programming, containerization and web services (micro or otherwise).
All of these things are wonderful and the certainty of more to come doesn't hurt, but in the thrill of the chase for new technologies, I fear that we have lost sight of a common-sense principle: that is that working code trumps everything.
I've been a computer programmer for a while now (I got my first computer 40 years ago), I love to write code and I love to re-write old code, but I have learned that there is enough work to go around, without the gratuitous re-writing of old code. If it works, and usually it does, if we can be honest with ourselves, then we should leave it well enough alone.
Continue reading →On Being A Technical Lead
It seems to be a truth, universally accepted, that the armies of the world run on their sergeants and the navies on their chiefs. These non-commissioned officers provide a valuable, nay essential, link between those who do and those who tell. (They also try to keep the new lieutenants alive and out of trouble, but that's a different essay.) It is my opinion that a Technical Lead is like those sergeants and chiefs. They are at the top of the pile of those who do and directly beneath those who tell. And as such they are a key link in the corporate I.T. structure.
Most roles on a project are easy to place in the timeline. Everyone knows that requirements gathering is an upfront activity, that computer programmers work in the middle and that quality assurance testers live on the tail end. A Technical Lead is more difficult to place, because they operate everywhere.