Being able to say that I have confidence in something I programmed is a great feeling. To build this confidence, I’m using unit testing. Unit testing is a method of verifying that individual pieces of code work as expected. I will not get into all the benefits of unit testing, I’ll just say why I am doing it: to check my work since no one else is doing so.
I began work on unit testing this afternoon. I installed NUnit and the Visual Studio extension to run unit tests directly:Then I added a new project to the solution called “Test”I started with the easy file to test. Vector2i is all integer math, the expected results should be easy to reason about. To test Vector2i I made a new file with the same name and added a suffix “Test” in the new project. I read up on a quickstart with NUnit and F# and I wrote some code:
Continue reading Morgemil Part 4 – Confidence
I’m going to be taking a bottom-up design approach to this project. Yes, I have an overarching general design, but I fully expect it to change. Change is acceptable and a constant. I’m going to be doing bottom-up design since I am unfamiliar with it, so another chance to learn. I’m not obsessed with keeping my original game design pure as some great mechanics could arise from unforeseen interactions.
Unforeseen interactions is sure to occur since as much of the game as possible will be procedurally generated (another hint, are you keeping track?). Therefore there will be a lot of math involved, not hard math, just a lot of it. So I’m going to start off with some clear functionality that I know will be required. Also, this is a chance to start becoming accustomed to the F# environment. Continue reading Morgemil Part 3 – The Core
About five years ago I almost made a video game. I say “almost” because I got bogged down in constant rewriting while searching for perfection so that project lost momentum and was never finished. Not to mention that I hardly knew anything, as this was the summer before I started college. A bit of digging in the history banks turned up the old Google site created for it. https://sites.google.com/site/intimidationgameproject/
I remember learning a lot during that project: Python, Panda3D, a ton of search algorithms, and a little linear algebra. All of that knowledge served me well as a springboard to further concepts. Just as importantly, it helped reinforce some concepts of software development I was taught later: the language doesn’t matter, results matter, and to focus on working software as the perfect code will never be reached, no matter the iteration count. Continue reading Morgemil Part 2 – A Technicality
I have a college-ruled notebook that I bought for a dime some years ago. I carried it to college with me and kept it in a box under my bed. Now, almost a year after graduation, I can still see that notebook sitting on the bookshelf to my right. Contained in that notebook is every project idea I have had in the intervening years and considered worthy, along with a bevy of notes and scribbles about the goals, design, and often implementation of that idea.
This long-term series is going to take the first idea entered into my notebook, in fact, older than my notebook: a minimalistic, old-school, single-player, open-world, 2D RPG.
This is hardly ground-breaking or original. The market is filled with such things and each has their own twist or gimmick. That is fine. I’m here to learn new things. I own this project and have the advantage of being able to do what I want.
So what do I want? I’m going to lay out a list of general goals here so that I can periodically remind myself. Many of these goals will be difficult to quantify and define, but I’m going to list them anyway because those are very commonly seen software requirements.
Continue reading Morgemil Part 1 – Goals
I am Daniel Oliver, a professional software developer residing in Nashville, Tennessee, and this is my blog.
My purpose in initiating such a recurring demand of writing from myself is of the utmost importance, for without it my resolve will weaken and this blog perish. This purpose is to become a better software developer and to become a better professional.
To accomplish this purpose, I shall write on a consistent basis. By committing to write about something, I’ll have to learn new knowledge and concepts, refine old ones, or possibly even correct anything I know wrongly.
Do not be afraid that my writing shall be limited to technical subjects of computer science. I am also interested in the business aspect of software for it is of vital importance. After all, every business must perceive business value, or preferably direct economic value, to commission software.
Gaining technical excellence shall not be the only topic but it shall be very prominent as it is an excellent foundation for good software. Making appearances in this category will be programming languages: their structure, implementation, and utilization; my personal projects; best practices; software packages; computer science; and industry specific knowledge.
The philosophy of software development is another piece to add to the puzzle. Achieving technical excellence and creating business value must be done in an efficient and timely manner or else any opportunity would be lost to a competitor or merely to the passing of time.
These three things: technical excellence, business value, and software development are not the only concerns present; but they shall be the triad that makes up the vast majority of my topics.
So I suppose all I’m really trying to say is: I have a lot to learn. Will you learn with me?