Hello and welcome! This is a development blog for an indie video game I wish to develop. I'll be posting my goals and notes to clarify my thought process and log my progress. This will be a deliciously static Web 1.0 site, so if you wish to leave a comment on any post, simply shoot me an email at abacus.talk [at] gmail.com. Stick around and perhaps we'll learn something.
A little bit about my programming background: I'm a web developer by trade, most comfortable using high level dynamically typed languages such as Python, Lua\LuaJIT, Javascript, and Scheme. I also know a decent amount about POSIX and the C standard library for IO and networking, as well as databases, linux, and shell scripting. Other languages I've briefly explored include C++, Io-lang, Erlang, and Haskell.
I'm a fairly open minded when it comes to diferent programming paradigms, so haven't come to any firm conclusions on the "best" way to structure programs, or picked any particular side in the functional vs non-functional programming debate. However, one quote that has resonated with my programming experience so far is the following by John Carmack:
My pragmatic summary: A large fraction of the flaws in software development are due to programmers not fully understanding all the possible states their code may execute in. In a multithreaded environment, the lack of understanding and the resulting problems are greatly amplified, almost to the point of panic if you are paying attention. ... For everyone else: No matter what language you work in, programming in a functional style provides benefits. You should do it whenever it is convenient, and you should think hard about the decision when it isn’t convenient.
Now, when writing a modern game, say an interactive 3D one, which must make a plethora of calls into stateful and imperative API such as OpenGL, writing in a purely functional style will be difficult, no question. Despite this, what I want to do is simply be *concious* of the functional style when programming. When analyzing each problem I face during development, I'll start by asking myself if it can be represented as a generic function, which can decoupled from the underlying IO implementation which is the source of the data it is processing. I may or may not find this to be achievable, but I'd like to use it as my initial frame of reference before I begin writing any code.