Coming to the end

Yes, I think…

I wanted to talk a little about how I think that I have experienced this module, what I have learned about the technologies and just as importantly, about myself and how I engage with the course and my personal projects. I would like to explore what I did, why and what I would now do differently. I learned a lot, and not in the areas that I expected to.

I was too scared to start in C++

When we were given the task of creating an app for the Jam, I was too scared to do the project in C++. There, I said it. I was worried that I would not be able to finish the project to a good standard in the allotted 48 hours and I felt that having something the show for it at the end was worth more than the experience I would have got from coding the prototype in C++. So, I used Blueprint, exactly the tool that I am trying to move away from. In retrospect, I think that was the wrong move and this was pointed out by staff, although frankly, I didn’t want to hear it at the time. I was wrong about that. At that time, I was not so far along with learning C++ and have a lot more confidence with it now, but I think that it would have gained more from the project had I just struggled through and learned as I went along. Having said that, I think that there was also benefit in learning about raw C++ before jumping into Unreal’s version of it, but I now think that it would not have been as painful as I first thought to just have a go. Having completed the Battery Collector tutorial, I am really looking forward to a pure C++ project, which will begin soon.

I should have started the project again when it crashed

I cannot say that the Game Jam project was a failure, not at all. The fact that it crashed and I lost the entire project file lead me to a strong desire to embrace industry standard techniques for protecting project against just this sort of thing. I learned about version control quite quickly and have used it on every project that I have worked on since that time. The other lessons that came from that experience was the problem of circular referencing, which I am surely guilty of. I came from the direction that it would be more convenient for the ‘weapon’ to know about the ‘projectile’ and the ‘projectile’ to know about the ‘weapon’ but, it turns out that there is danger in this. Particularly in how objects are created and destroyed. If the objects need each other, its very risky to manage the start and end of their lives and they lean on each other in undesirable ways. I also found out that there are established Object Oriented Design Patterns and frankly, that has been a huge relief and I am now aware that there is a tool kit that I can learn that will help me plan and visualise the structures that I need to build for the games I make. However, although I learned a lot from the failure of the project, I feel that I missed out on being about to link the rest of the course material to that project. By the time that I realised that the rest of the cohort were carrying their projects forward, I felt that it was too late for me to do the same as I would have to rebuild mine from the beginning. I regret that decision and have decided, as detailed in my CPD report, to recommence the project applying the lessons that I learned along the way. I will be working on this during the three week break between modules.

First Class Blues

Here’s one that I was not expecting at all but actually hit me quite hard. When I came off the BA and having received 78%, I expected to take to the MA easily and knowing that I work hard and put a lot of hours in, thought that I would replicate that sort of performance. The realisation that the MA is a much greater challenge and very different to the course I studied before was slow to dawn on me and I feel that I responded quite negatively to the first set of marking comments at the time, despite receiving a respectable score for a first mark. I am pleased that my concerns were taken seriously and care was extended in explaining in more detail how I may have done better, but I didn’t expect my reaction to be so strong. I think that my confidence was bound a little more than I thought to my recent success with the Degree and perhaps I needed that to continue. That’s an error. I feel much better about things now and realise that I am receiving a tremendous benefit in having the think differently and in being held to a higher standard. It’s ironic as when I was exploring my options with regard to taking on an MA, I talked with staff at Falmouth about how I wanted to be surrounded by people smarter and further along than me, but when I experienced that reality, it took longer than I thought it would to adapt. I am grateful for the opportunity to be here and to learn from a variety of people, staff and students alike.

Impostor!

This is something that has only been identified very recently during a conversation with a member of staff but explains why I felt the way I did above. I think that I may have this ‘Impostor Syndrome’ regarding my ability to make games and in recognising how far I have come with in that goal. The thing is that this is in direct opposition to what I say a lot of the time. I find it easy to talk about the rate at which I have been able to learn how to do this work and the progress that I make all the time but actually, when I stop and recognise how I feel about it, I don’t yet feel that I belong and that at some point the gaps in my knowledge will identify me as a fraud. I think that was one of the motivations for Blueprinting the Game Jam project and for the the need to defend myself from the feedback that I received for the initial coursework in which I got a merit! I find that I continually remind myself of the things I have achieved as though they need to fuel the next challenge. I feel much better having had this realisation and am becoming much more aware that I do belong and that I can contribute and that it’s ok to get some things wrong and in fact, getting things wrong (combined with putting the effort in) shows that a person is learning and operating right at the edge of their current ability. I read somewhere, although I can’t seem to recall where, that the more specialised you knowledge becomes, the more obvious the gaps in it become. Also, the more you learn and achieve, the better your peers become. Both of these can fuel this problem if the are misinterpreted and yes, I think I may have done that.

The Direction of the Journal

While I was studying on the BA, we had to keep journals for each of the modules that we completed. The aim of that journal was to show the journey that each of us had and to show our ‘working out’ so to speak. I think that although I consumed the material from this course on reflective practice and writing, I didn’t fully appreciate the difference in the aim and style of this journal. On the BA, I wrote about everything that I did, what I thought about it, what was working and what was not, but it was missing the reflective side I think. I don’t remember committing much material that focused on how I had got to this level of skill, or why I had been encountering some problem or any real plans for solving those issues. It was all about the fix to the immediate problem, all about what I was learning to sort out the ‘line trace’ or the ‘overlap’ not registering, that sort of thing. I found it very useful, if a little too time consuming, although learning to type properly helped out a lot. I assume that we will need to keep journals for each of the modules that we complete and I will continue to practice what I have learned during this time. I bought one of the books that the course material recommended, ‘Search Inside Yourself’, and I will read it over the break between the modules.

Learning C++

I am very happy with the study that I have been able to complete on C++ and I feel much more prepared to tackle Unreal with it now. I do think that there are things I still don’t understand to a point where they could be effortlessly implemented (like I can in Blueprint now), but raw C++ certainly not alien to me anymore. I have almost completed the Udemy course I have been studying and its taken a long time as I have not left a single section without fully understanding the material, completing the quizzes and every programming challenge that the course sets, which are numerous.

In Conclusion

Now that the module is coming to an end, it’s clear what its purpose was. Who am I as a developer? Where do I want to go? What is stopping me and how do I deal with that? I did not expect so much reflection and I have struggled to come to grips with the academic writing, but I have received a huge benefit from the organised introspection. I now have a very clear aim, I know what I need to work on in order to get there and I have a structure in which to do that work. Over the break, I intend to execute the CPD plan I have created. First I will finish the C++ course that is nearly complete, then I will complete the design patterns examples and corresponding UML diagrams. After that, I will begin the Hostage Rescue project in C++ and set up a regular routine to learn and practice the math I need to learn in order to better understand the gameplay programming I want to do. At the bottom of the list, but still important to me, is the animation goal that I have as I think that starts the process of broadening my skill set as a developer. All the while I will split my time up so that Serial Link gets the attention that it needs also. I am confident that all of these topics are connected and that skill gained and work completed in one area will bolster my effectiveness in the other areas leading to overall progress.

My Experience with Project Management

Image from here

As someone who has now worked on a few different project’s, although all academic in nature but one, I thought I should talk a little about my project management experience considering the nature of the material from week eleven. I will talk about how Agile was introduced to me, how I took to using it or not and how I think Kanban fits in to the mix for me.

Being introduced to Agile with Scrum

I was introduced to the Agile approach to software development and in particular, Scrum, early on in the BA top up course I took in 2017. As with most things on the course, the concepts were explained quickly and in a hurried fashion (our lecturer needed to be everywhere, all at once, but still managed to deliver a great course) and I don’t think that I understood what the benefit to the methodology was. I don’t think that I was alone in that either as although most of the other students present were on the course as a logical continuation of their study rather than coming in from the outside like me, they did not seem to have had to work in this way before. I was already vaguely aware of Kanban and had stumbled across Trello in reading around for better ways to manage my business tasks. We were informed that we needed to set up a Trello board and use the standard lists (To Do, Doing and Done) and although there was talk of Sprint’s, there was no mention of User Stories, the Scenario Testing to validate that they had been delivered or the idea of a Minimum Viable Product, at least not in those terms.

My First experiences with Agile

I think that considering the incomplete nature of the introduction to Agile combined with the sense of urgency that was being instilled due to the quality of the coursework needing to be very high, I saw Agile as a glorified to-do list. I thought that the bi-weekly catch up’s with the lecturer were just to make sure that the work was indeed moving forward. The idea of a ‘Sprint’ was not a lot more than ‘In two weeks I want to see where you are and I need to see that the project has moved on’ and not the heavily defined planning and tracking tool that I understand it to be now. Looking back, I would have benefited from understanding the link between the Sprints, the Backlog of User Stories and the fact that they combine to contribute to an MVP. I do think that the the idea of delivering something that worked as a whole was communicated and I do remember scrambling around to get assets that the team were working on into the main Unreal project file when each sprint was due. It’s fair to say that my memory of the process will be hazy as it was quite a while ago now and there was so much for me to learn and take in. I can say though that we did not create User Stories or Scenario Tests and in retrospect, that’s quite a large section of the Scrum methodology missing. In the teams we needed to choose a project leader and not a ‘Product Owner’, ‘Product Manager’ or ‘Scrum Master’, all important roles in the Scrum Agile approach. There were no Stand Ups, Retrospectives and work was frequently changed during the Sprint, which is forbidden until the Sprint ends and there is another Sprint Planning Meeting.

Despite a great many of Scrums implementation details missing, I did come away from the experience of the first two coursework projects with a better idea of why an approach like Agile should and does work. I liked the fact that there was no major upfront planning simply due to the fact that I had such little skill at that time, I would not have been able to create much of a plan past my ‘best guess’ at how something will go. I do appreciate that is the nature of most plans, but the clarity would have been very low and the probability that the content of the plan would need to change dramatically would have been high. That meant that Agile, even in its incomplete form, was quite a good fit for me and the team’s I worked with throughout the course as it was at least obvious that being flexible and responding to change was encouraged.

The mighty Kanban

When the need to complete a Gantt chart was thrown into the mix during one of the initial projects, I really felt that it was in direct opposition to all the benefits that had been communicated to us regarding Agile. Here was a document that was heavy in upfront definition and recording of tasks, dependencies and estimations of time and for me at least, seemed to be in direct opposition to the Agile methods. I think that it was intended that the Gantt chart be used in planning Sprints but I have since discovered that Scrum already caters for that kind of planning with the User Stories being broken down and prioritised and then being pulled forward by a team member willing to accept ownership of that task. Also, time is a tricky metric in software development, I know from my own experience, and so Story Points are used as a way to estimate the overall difficulty and complexity of a broken down User Story leading to a better estimate of how long the feature will take.

I did a little digging around at that time and stumbled across something that informs what I do even now. I found a presentation by a Microsoft project leader, Eric Brechner, and having watched that, was convinced that even Scrum, with the its limited planning and flexible nature, was still a little overly complicated. The way he spoke about Kanban really showed the simplicity of what he called Continuous Delivery. He calls the system an evolution from Scrum and talks about Scrum with respect. He does however say that he believes that the time spent Sprint Planning, tracking Sprint progress, holding daily stand-ups and the retrospective at the Sprints end would be better spent just, well, working. He talks about making sure that each of the Kanban board’s column’s are divided into two though, something that I had seen only in his presentation. The sub-column’s are the tasks that are to be completed and the ones that are complete. Sounds simple, but both of the sub-column’s contribute to the Work In Progress limit of the column that they combine to make. This makes it very easy to see what needs to be done from what is already done without the tasks having the move forward into the next column. The introduction of WIP limits in each of the columns keeps work coming at a steady pace so that developers don’t get overwhelmed and effort is tunnelled into one or two tasks (or however many tasks are appropriate for the team). But, having tasks that are complete still contribute to the the WIP limit does something very important. It act’s as a self imposed bottle neck that immediately shows problems with the work upstream and stops work being constantly pulled forward to that particular column, completed to that point and pooling there with no where else to go. This stops work being wasted on features that are not a priority and encourages the team to find out what the real problem is and band together to solve it.

This is a great presentation on Kanban over Scrum and well worth a look.

That’s the major difference. Scrum focuses on using the product backlog to house the User Stories just like Kanban, but from that, the Product Owner must create a sprint. All attention is then on that Sprint and the content of that Sprint should not change until it is complete. In Kanban, there is no such structure and tasks are pulled across to board at a steady pace and completed. The Sprint seems to me to be the last area of rigidity. So is it useful? Well, business people would likely think so as It’s the closest thing that an Agile practising team can put forward as a forecast. If there are team members that are perhaps not as intrinsically motivated as they could be, they may benefit from the push of the external, intermediate deadline. But I think that if the team is motivated, and the ‘Done’ rules for the board are clear and being obeyed, the Sprint is just not needed. On of the other key arguments is that at the end of the Sprint, there should be a prototype of the software that is available for the Product Owner to test. With Kanban, its no different. The only component needed on the board is a done rule in a ‘Build’ column that collects a number of tasks defined by the WIP limit, and forces a build in order that they can move onto the next column.

I would go with Kanban all the way if I could, and I have with Serial Link, but it’s clear that Scrum is very established. That means that in order to fit into other studios and be able to collaborate, I also need to embrace Scrum and that’s fine. It’s not the difference between cars and motorbikes, it’s as if we were talking about how different petrol and diesel cars feel to drive. Different, but closely related.

Using Now

In my little studio and in making Serial Link, I am using Kanban. I have dedicated one of the walls and set up the following columns.

  • Backlog
  • Breakdown
  • Development
  • Implementation
  • Build
  • Validate
  • Done

The Backlog is where I keep all the items that I want to work on although I currently don’t have this organised in User Stories or Epic’s. I think that given the chance to set it up again, I would do it that way as I feel that approach captures the emotional experience you want to player to have.

Backlog in my home studio

The Breakdown column is where large tasks get, you guessed it, broken down into smaller tasks. So, a large task like ‘Improve the Gore’ was broken down into several things like ‘Find better particles’, ‘Find out why the decals clip’, ‘Find a better way to draw blood, reducing the number of line traces’ and so on. I think that creating User stories would have been better here though and in my next project I will try using that approach.

Done rule: Broken down to the point where we know what the feature does for the player and what it looks like step by step. We know what assets we need and we have the work accepted by a team member.

The Development column is where the design and prototyping happens. This is where I get a bare bones ‘I could show this to other developers’ sort of feature done. It would have no UI and be printing feedback to the screen but all the pieces would be there before it is declared ‘Done’ and can move on. The WIP limit is quite high to accommodate the high number of smaller tasks that may be required to complete the main task from the Breakdown.

Done rule: Assets and logic have been created. There are no bugs that we know about and all the assets are ready.

The next column is Implementation. This is where I take the feature from ‘developer ready’ to ‘playtest ready’. Items don’t leave this column until they I am happy to put them in front of a play tester with confidence that they will understand what it does and how to use it. The reason that the WIP limit is only one is that I am the only developer that touches the project file. Knowing more about version control now, I would change this in the future and allow other developers to check in there own assets and so on.

Done rule: All logic and assets are integrated into the existing game to a standard that we are happy for a player to experience.

After that is the Build column. When the WIP limit is reached here, the project must be built and satisfy the frame rate criteria. This means that even though I am not using Sprint’s, I still have incremental builds being triggered in a systematic and predictable way. There are a couple of things that I will change in the future with regard to the done rule here. Replace ‘extended period of time’ with an actual number and ‘no bugs or crashes’ to something like ‘all bugs captured in kill list’. The presence of bugs should not mean that the build cannot go through to validation, the next step, as it could be that the feature needs heavy reworking anyway.

Done rule: Game builds with no errors and no warnings. Build player for extended period of time with no bugs or crashes.

Coming toward the end of the board is the Validate column. This is where the features are tested by users and is critical for making sure that we do not develop in the dark, emerging one day with something that no-one wants. I need to make sure that we are creating things that people actually want to play with and testing is very important to me because of that.

Done rule: Player reactions and feedback has been gathered and analysed. All issues identified and inserted into the workflow as needed. Ideas have been captured for the backlog if there are any.

The end of the board is the Done column and is just a place to collect the stickies that have travelled through the process. Its good to have them there as a reminder of whats gone into the project and allows better reflection in the future when planning new projects. Well, I suspect so, as this is the first one that I have managed this way!

Will that Change in the future?

In the immediate future I will be managing the Hostage Rescue project using the Trello board I have set up and using Scrum because I want to get the experience of doing that. I can see that in projects where I have the authority, I will be using Kanban only as I really do think that its the better way to go. But I have nothing against Scrum and I want to be able to contribute well to other studios using it.

Community.

Image from here

Jobless Loser.

This weeks material is about making sure that we get involved with the communities and movements that our chosen specialism’s relate to.

Its true, as talked about in the content, that friends and family are not the best places from which to get support (unless someone in the circle happens to be a developer!). They are not usually connected to what we do and don’t usually understand the work at a deep enough level to appreciate the time and effort that goes into it. They then struggle to know what to say and suggest should problems arise as they don’t understand it at all. This can make for one lonely developer, something that I have experienced before.

There is another angle to this that I have encountered personally. I am ‘between careers’ at the moment. I used to be a retailer and now I want to be a game developer. I have been studying and practising game development since July 2017 without earning a penny for my family. My wife is incredibly supportive and due to the unusual levels of stress I had to endure while running my business, gave me two years in which to make that change. The ‘deadline’ is now the end of this year and I have to be earning something from development. My point is…

Its very difficult to show how far I have come in this area when the people around you don’t know what you do. Without realising it, I think that they hold me to the ‘Call of Duty’ standard of gaming and don’t realise how much learning and practice it has taken to get some guys on screen and interacting with each other. I walked my Wife through the entire process that a character has to go through to shoot one round and it really made her appreciate that there is so much going on behind the scenes. I worry that there are people in my life thinking “he should just go and get a job” and thats something that I didn’t expect this material to provoke.

In any case, there was a wealth of information in the course resources and I enjoyed the presentations by Al, talking about the various aspects of being involved in these communities generally and by Heidi Ellis, talking more deeply about how a practitioner could contribute to an open source project and what to expect from the people who run it. I must say that I have had a strange, emotional response to these things…

Contribution

Thinking about this now, I rely very much on Google to find the answers to questions that I have. There are two elements to that realisation. The first is that I regularly find myself on one of about five websites which means that the information that I need is more concentrated that I think. And the other is something that I only thought about when Al was talking about tacit knowledge. I don’t contribute to these resources at all. I wonder how many learning experiences I have lost out on because I didn’t try and answer someones’ question? The reason that I haven’t done that is fear. I am afraid that I am not good enough at what I do to have the suggestions that I make taken seriously. That’s ridiculous now that I think about it ‘aloud’ so to speak. I need to get over that feeling and do the best that I can do, knowing that at all times, there will be someone more qualified to answer that question. I need to remember that I just need to be qualified enough and even then, my incorrect advice may trigger the right answer from somewhere else. That is of value to the me and the person asking isn’t it? If I can do that, then I stand a much better chance at improving my knowledge and skill in my chosen domain. And, as a side effect, may create and develop some lasting relationships that turn allow me to engage in more spontaneous conversations that lead to knowledge I didn’t know I needed.

False Events Appearing Real

Yes it is. But it can also keep you alive… Image from here

Fear. Its a funny one. I can’t say that I have had many ideas or contributions ridiculed to the point where the experience has had any lasting effect on me. Why do I feel this then? I have just looked up at the ‘I will outwork you’ sign that is above my monitor (I know, I’m that guy) but beside it is a quote I pulled from the course material very early on. “There is always shame is the creation of an object for public gaze” Rachel Cusk. Thats it. I feel that I have shamed myself if I don’t offer up the very best solution that the computing world has ever witnessed. I feel that, had I just waited a little, learned a bit more, put in some more hours then the solution would have been better… Thats a habit I need to break. I need to feel better about what I can do now, not wait on the Mike that I am trying to build in the future. Is that perfectionism? I’m not sure, but I don’t think so.

Solving it

I will be looking at two areas for this post. I will identify the communities I wish to become a part of. This will include at least one official body if possible. The other is that I will look into dealing with this feeling I have and see what I can do about it.

I expect that once this work is complete, I will be a part of something larger than myself and the MA, and that I will be able to start looking for and answering beginners questions about the areas I am working in. The most obvious of those is Unreal as I really still feel like a beginner with C++. There I go again! That’s it, right there! I am going to try that again. I expect that I will be able to answer some beginners questions about C++ as well as those on Unreal and if I get them wrong, then someone will point that out and I will have learned something of value.

Having completed this small research project I hope that I will have better connections within the field of gaming development and that I will feel more comfortable about talking with others about my experience and about contributing where I can.

Specific

I will find at least one official body that fits within my desired skill set and join them. I will find at least three communities that I could learn from and contribute to and join them also

Measurable

This is complete once I have joined the communities and bodies I decide on.

Achievable

I am clear about the skills that I am trying to gain and just need to spend some time researching online

Relevant

Joining a body that focuses on game development and or programming excellence would likely be the most relevant activity. The same is true for identifying communities to join.

Time Bound

I expect that this will be done today or tomorrow and is not a long term project.

So, how did it go?

Well, the course led me to many good resources and I found some on my own. I have a list of what I found below. First are the official bodies and organisations. It turns out that joining them requires payment and although that is understandable (and kind of obvious really) I am not looking to pay anything at the moment. Because of that, I did not join any of them.

Gaming and more

  • TIGA – Representing the Game Industry
  • IGDA – International Game Developers Association
  • UKIE – The Association for UK Interactive Entertainment

GDC – Game Developers Conference also came up in this search and although I may be wrong, is not related closely enough to be included in the list. I have included it here though because it is a very well recognised event but is prohibitively expensive for my at this time in my career. I found many other bodies and organisations and I could easily have spent my whole morning looking for more of these but that really isn’t what this is about for me. Its getting involved at the bottom rung of the communities that I feel I will reap the greatest benefit at the moment.

At a more general level I looked at:

I have emailed Software Cornwall and expect a reply from them soon. I think thats a little overdue as someone living in Cornwall and trying to be a developer! I joined the Agile Alliance as a subscriber and look forward to learning more from their newsletter’s and spending some time on the website. This ties in neatly to one of my stated goals so I hope to get value from this.

While looking through the IEEE website, I didn’t seem to find much there for game development and I don’t really think that my vision “Make a player feel like a Ninja on the Sofa” matches there vision “IEEE’s core purpose is to foster technological innovation and excellence for the benefit of humanity.” I just want to make games at the moment. However, I have created an account anyway in case I am wrong. They are clearly a large and well established organisation.

The British Computer Society, although very broad, does have an Animation and Games Development Specialist Group but there is a fee to join that I don’t want to pay at the moment. The ISACA was not relevant to me upon closer inspection and focuses on other areas of IT.

Joining in

Having spent a little time searching online and following the leads from the course material I have joined the following communities:

As a user of the Unreal Engine, I am automatically part of this and have posted one of two ‘thank you’s’ but I could easily pay more attention to this and see if I could answer some beginner questions. A quick look around for questions to answer, instead of looking for answers myself, has informed me that there are many areas in which I could help. GameDev.net looks really good with plenty going on that I wanted to follow up on right there on the home page although I need to make sure that what I look at is relevant and not just sucking up time. Stack overflow and the sister game development site will be good places for me to spend time. I would be exposed to lots of problems and their solutions that would help grow my knowledge and improve my thinking.

GameDev.tv is the hub for Ben Tristem, a well known Udemy instructor and it’s really a marketing environment for his courses with limited value outside of that. The courses are great, but that’s not really what I am looking for. I have included it here as I am a member just because I own some of the courses.

So, I have joined all of the communities that are appropriate for me at the moment and I have much more awareness in this area now. I have created a folder on the address bar in Chrome and put links to all of the sites that I have joined, this should help me to keep track of them.

From here?

I think that I could build up my reputation points on Stack Exchange and its sister site, Game Development. As soon as I saw that I have one reputation point on each, I thought about how I could improve that! Gamefication in practice, although I am aware that’s not the only reason for the system to be there. I think too that time in the C++ section of Epic Answer Hub would be a good place to get started.

Creativity Exercise.

Week 8 was all about creativity, what it is and how to be better at it. One of the suggested exercises was a short story of 500 words that uses the numbers 1 to 12. I decided to go with that one. I hope you like the story, but its not pretty. It could do with development and editing but it was just an exercise. I completed it within an hour and a half. Any thoughts, let me know.

Futuristic Soldier from here

12 to 1.

Move, you must move.

It was almost inaudible over the com devices military static…

“Here!”.

Push off the right foot, explode back, pull triggers. Complete. Good, that’s good. Red mist, sparks, perforated equipment and fifteen stone of ‘man down’ in front of me. 11 to go.

Move.

On your knees, check the machine pistols. Right, good, left, nearly out. Gunfire, loud and intrusive, about ten feet away. Swearing and the sound of armour hitting cover. Opportunity. Slide to the corner, that’s it.

Rounds leaping from the left hands’ asset, shattering his knees from behind. Three more to the head as he crumples in on himself, rolling back looking up at me with a tattered face. Grab the weapon. Grab the grenade. 10 to go.

What now? Don’t think.

Moving right, vaulting the concrete, landing softly. Three up ahead, back to back, teamed up. Against the rules. Setting off Crawler Grenade. “What the f…”. Too late. Shock-wave deployed, hydro-static shock rupturing everything biological, soon to be dribbling from the openings in their kit. Back the way you came. Kill, move, kill, move, just like they taught you. 7 to go.

At the door now. I could pop this in like foil. You’re thinking again.

Limpet fitted, armed, three seconds… two… one…

Moved into the room too early, Limpet blast softened by Tac Armour. Foolish move. Flashes from the dark, rounds inbound. Fuck.

Missed. Returning fire. Staccato illumination, blood mist, panic, intense noise but over quickly. The big one is down. 6 to go.

Sun-Stick deployed. Big one still moving, moaning like a deer from back home. Leave him, good distraction.

You need to get out.

Another door, open. Weapon up and ready to destroy. Moving to the frame. Footsteps. Slide back now, gently. He’s coming in to investigate the big one’s death rattle, score some kit no doubt.

Sling the weapon, use the Razor, it’s worth more points after all. Flexing the right hand, I can never get this work… Ah, there it is.

Three of the four blades disappear in the slit between the collar and the head dress. Silly design really, leaving the neck exposed like that. Odd though, the feeling of the skin conceding after the initial resistance. I’ve pushed too hard, I can feel the muscles of his neck on my fingertips. Torrential blood upon extraction, not efficient. 5 to go.

Pain. The ribs. From the doorway I popped earlier. Too busy fucking thinking. Any second now.

Sorry Mum, I’m sorry

The head shatters, Cranial Homing round I think, pink paste and fractured technology everywhere. 4 to go

Get up.

Stooped and wincing but I can fight. Aim at the door. Steady. Yep, reckless idiot, gone right to ‘Stumpy’ to get his kit. Automatic discharge from the Sabre and your full of Ignition rounds. The two to your face will kill you, I’ll wait a sec’ before popping the Alternate-Fire.

Nothing. Fine. Drop a Proximity-Ping then. 3 to go.

Moving from the room, heel, toe and in half crouch. There, waiting on another target. Do I have a…? Yes, I do. Creeper initiated. Up the wall, across the ceiling and… yes, onto his shoulder. I said that slit is a poor design.

Shrieks of excruciating pain, clawing at the neck and terror that there is nothing to be done. Quite now, its shredded the trachea. He should stop moving soon. 2 to Go.

Well, 1 really.

Perfect. Proximity ping. Hitting Alternate-Fire on the Sabre should set off the Ignition rounds from earlier and yes, I can hear the howls of the last combatant fighting for a reprieve from the chemical torture.

No more to go.

A calm voice over the global comms. “Well done Lilly. You’re in.”

Creativity, catching up on week 8

Image here

The purpose of this weeks content is to introduce me to various ways that the creative process can be structured and discussed with regard to its role in elevating an app above its competition. The creative process is something secondary to me at this point in time as its no secret that I am trying hard to develop the technical end of my ability so as to be able to build games that are detailed and rely on complex systems. I think that some learning in the area of creativity and in particular its purposeful and somewhat structured execution would benefit me. Its also clear that recognising the value of gaming structures and the ‘hooks’ would make their implementation into other types of app’s easier. I enjoyed the material from this week and have been introduced to a vocabulary with which to talk about these structures and their effects.

Pay more attention

There is a strong emphasis on making sure that the proposed app is commercially viable and therefore able to monetise effectively. I think that I have been a little dismissive of this part of the development process. I am recognising that commercial viability is of fundamental concern, should the developer of that app or game wish to make their living producing such things. Because of that realisation, I think that I will need to revisit some of the other material from the course that deals with Creative App Commerce and Audience Research. I have been very, very keen to just get going and produce ‘something’ and then think about how I am going to get that ‘something’ to market. I know now that is more than likely not the smartest way to go about development, particularly in the long term.

How to get recognised?

It’s a very crowded marketplace. The presentation talks about an apps need to be distinctive and appealing and that developers should be aiming at this goal right from the start. This is made somewhat easier if the project is already aimed at a well defined target market. The conversation about the USP (Unique Selling Point) was touched upon again and I think that I would benefit from having a read around as to what this really means. I understand the phrase, I just wonder how many successful app’s are really unique and if they are, how much of their content or deliverable experience is truly groundbreaking? Then there is the issue of ‘staying relevant over time’. This is quite a challenge considering how quickly tastes and technologies move on.

Redundancy and Pattern Recognition

Humans and animals alike make assumptions based on information from previous experience, even when that information if not complete. We fill in the missing pieces and assume that we know how some experience will play out. This is understandable though, considering that there is limited time and the ancient part of us is still wired up to avoid threat and death. There is another way to look at this structure and its effect too. How much information is enough? Does the brain need to know the genetic make up of the dog that’s snarling at it? Or, is it enough to know that ‘snarling dog’ equates to ‘bitten arm’ in this particular brains experience? But, its true that there is inspiration lurking in looking more closely at those auto-piloted systems and trying to disengage them sometimes.

Over time, people get more reluctant to experience new things as they get older. With regard to creativity, it can be a problem as it leads to stunted innovation and our ability to solve problems is diminished. But there are things that we can do to circumvent that problem.

Disruptive thinking and practice is a good way to do this. The practice of disruption can be applied purposefully by experimenting with known and well understood concepts, assumptions, mechanics and so on. I understand this to be a ‘break it on purpose’ sort of process in which the creative can try out some ‘what if’ scenarios. This is not new and not confined to apps and games either. Just look at Royce Gracie winning the first Ultimate Fighting Championship and how he used the grappling and submission based martial art of Brazilian Jiu Jitsu to ‘disrupt’ the idea that striking was the most important fighting skill.

Its clear that there has been much of this with phones and social media being the one that leaps to mind. But, while those things have come about because of fresh technology, existing tools can be re-purposed in a similar way and is likely easier to execute in most circumstances; the toys are already there.

This effect of ‘filling in’ can also be positive, in that creatives can build on the work of others by including material that acts as a trigger in the observer. The video talks about ‘genre’ in this light and I found this quite enlightening. The alternative task for the developer, or any creative field, would be creating everything from scratch every time. I think that I am getting a better sense of what the scope of a USP can be. It is indeed legitimate to collect established themes and well understood ideas and mechanics, but arrange them just a little differently. This makes me think of the guitar and the radically different music that can be presented to the listener. The difference in how a listener is likely to experience the music of Steve Vai, a virtuoso rock guitarist, and Tony Rice, a well know Blue Grass musician, is pronounced even though both musicians are using much the same instrument.

De-Familiarisation is something that Steve Vai practised while becoming a ground breaking guitarist. He talks about strange practices in the lessons ‘Little Black Dots‘. I think that de-familiarisation is another way to say ‘novel’. Its well understood that the human mind wants just enough novelty to make life interesting but not so much as to make things seem unpredictable and dangerous. Having novelty confined to a game satisfies both needs well I think.

Hooks

I really enjoyed the section of the presentation that talked about hooks and how they are employed in different ways to affect players and app users. The idea of ‘stickiness’ is also great and really fun way to talk about being able to build habits in the player that keep them coming back to the product. This is another area where I feel that having a new vocabulary will benefit the design work that I carryout in the future. I can see the potential reward of thinking about this early in the development of a new product and experimenting with different hooks to see which are the most appropriate and effective in creating a sticky gaming product. This section has been the most interesting part of the weeks material for me and will form the basis of a SMART goal. Instead of talking about what I found out from the presentation, I will conduct a little research for myself and perhaps a light examination into which hooks I am using successfully and unsuccessfully in Serial Link, the only live project I have at this time.

Specific

Look at 3 to 5 sources online regarding hooks in games and identify the strongest ones for the types of projects that I produce.

Measurable

This will be complete when I have update the journal with the information I find on the most appropriate gaming hooks.

Achievable

I am already making games and have utilised some hooks without knowing that there is an established structure to them.

Relevant

As an aspiring game developer, I need to understand how to use these tools so that I might make better games.

Time bound

I would like to have this work complete within one week and should spend no longer than 3 hours on it.

Reflecting on my Reflections

Image from here

My goodness I am glad that this is done. I think all the students agree that the report on continuing personal and professional development has been difficult. Very difficult. But, we all also seem to agree that it’s been of great help. Talking it through with the other guy’s, I think that the report tackles one of those big, scary questions… What am I going to do? For some people, not knowing what they are doing is freedom and to have a plan is tantamount to prison, but for the rest of us, there is something in our brain that wants to know what the hell we are all about. My perspective has remained focused in one direction for the most part (being a game developer) but I have benefited greatly from the constant poking that the course is designed to inflict. It has helped me to look deeper into what I want to do and what I need to learn and practice in order to make that dream real.

Stronger together

The other interesting thing that happened was on the webinar yesterday (Wed 10th). Jamie asked what had been the most difficult part of the course so far and contrary to his expectation of something technical (I assume) the answer was ‘motivation’. That was a bit of a surprise to me but on listening to a couple of the other students talking, it made a lot of sense. There were two topics that came up for discussion. The first was ‘How do I fit all this in?’. Thats a fair point. Although this is a part time course, there are people working lots of hours but still keen to learn from a programme like this. The other topic was that of camaraderie and the difficulty of building that in an online environment.

Rise and shine

There was a conversation about how to fit the course content into a life where you actually have to go out and earn a living. I feel for these guys as a stay at home Dad. I have a lot of flexibility with my time, however, I cant code at a level that would get me employed so its not all sunshine and roses! But mostly it is…

The only suggestion I could make was an approach that worked for me when I had my shop and just had endless tasks building up because of it. Get up before everyone else and get and hour or so in before you day turns into doing stuff that other people need. Its a simple solution but I will admit that it a difficult habit to get into. I learned to do it by putting my phone on the other side of the room so that I would have to get myself out of the sack to turn it off. It worked, most of the time, if you just get some clothes on right there and then and get to the kitchen to make coffee, tea, bloody Mary, whatever you do in the morning. Once I was in the habit I got up at 5.30am and got 2 hours in before I needed to get showered and all that. A month later, I could see the difference in the work I was getting done and the quality of the work was better and not so rushed. The other end of developing that habit is getting to sleep on time. This was just a tricky as you do have to give up some free time to make an approach like this work. But, if your serious about what you doing and you want it more than you want to watch TV then really, should be easy enough. It gets harder when your relationships get a little compromised because the evening is that common time where you catch up with the other half and build your bond. Missing that time too much can be a hazard and I have felt that happen a couple of times. Creating dedicated time to spend with my Wife was to answer and has worked well ever since.

Sunday = No Work. End of story.

I get up at 5.45 these days and try to get 45 hours of work in per week, 20 on the MA and the other 20 on C++, Serial Link and some other bits. Also I need to study math. I keep track of which project my time is going on using TickSpot.com and my trusty Nerd Chart. And finally, I use a form of Pomodoro to make sure that I get my backside out of the chair every 30 odd minutes and it also helps me to stay focused as I know that a break is coming and the time is limited. There is just something about it that works for me.

Discord on Discord

The other suggestion that I made was setting up a server on Discord, a gaming oriented chat client that we could all use to get to know each other better and support each other. I set this up as soon as the webinar finished and invited all the students from the cohort to it and Im pleased to say that majority of them have already joined and its been fun talking to them. This has led to conversation about assignments, grading, feedback and personal ‘get to know you’ stuff too. Very useful and very enjoyable. I think we would have benefited from this a few weeks ago.

It has made writing this post take twice as long though… 😉

My CPD Goals

This is what I have decided are the top five skills I need to work on in order to move toward the reality that I am professional game developer. In particular, a game play programmer with some supporting skills in animation and and a really good grasp of the Agile methodology. Below are the goals from the final draft of the report. Very challenging piece to write and I am certain that there are many areas for improvement in how I think about this kind of thing and also in how I research. I think that I have strong ideas on what I need to do and am not quick sometimes to look at alternatives. Something to work on in the future, in addition to all the things I am about to put here. Busy times. Love it.

After this is posted (and it will a monster) I am going to come up with a time management plan and think about the practical implementation of all this reflection and talk. It’s the right talk, don’t get me wrong, but without some thought into how to execute this, I think it will be half cooked at best.

Goal One: C++ & the Unreal Engine

This is an important skill because C++ is an industry standard programming language, particularly within the context of complex PC and console games. I work with the Unreal Engine (Epic Games. 2019) due to the feature rich environment and business model offered by Epic (Epic Games. 2019). To access advanced engine features, I need to move toward coding in C++. This also removes the performance overhead introduced by additional processing required to use Epics visual scripting tool, Blueprint and the virtual machine it uses (Cpt.Trips. 2017).

Currently, I don’t have the proficiency to work quickly in the engine with C++.This obstacle has emerged because I had five weeks to learn about Unreal before coming back into education to study the final year of my BA. Learning C++, how Unreal uses it and the Unreal Engine editor simultaneously was not feasible for me, I just could not absorb that much information at once, so turned to Blueprint.

I am 68% through a course on Udemy (Frank J. Mitropoulos. 2019) that teaches the foundations of C++, introduces object-oriented programming principles and I will complete that first. Then, I will restart the Hostage Rescue Game Jam project, which is explained in the context of another goal. I will plan the classes and their relationships using Object Orientated Design Patterns (Gamma et al., 1995) and will express that design using the Unified Modelling Language (Object Management Group. 2019). Both topics are discussed later. I expect I would have a prototype within one hundred development hours. I will work fifteen hours a week on this task. 

Once I complete this challenge, I will investigate refactoring Serial Link into a C++ project. Serial Link is my main, personal game project that I hope to pitch to publishers this year. I will take the opportunity to redesign the class and interface structure to improve its performance and component portability.

This deliberate practice will solve the challenge because I will interact with many of Unreal’s features, learning how they are implemented in C++. My complex game project encourages this. I should gain an understanding of the structure of the Engine and will be successful when I am completing work more fluently and solving errors more quickly.

Specific

I will start the Hostage Rescue Game Jam project again and develop it in C++ so I can write more concise and performant code when compared to Blueprint.

Measurable

This project will be complete when the game prototype is finished and working.

Achievable

I have completed a tutorial using C++ in Unreal, comfortable that I predicted much of the material and understood all of it.

Relevant

This is a skill that is fundamental to my stated goal of game programming, therefor the challenge is relevant.

Time Bound

One hundred hours is appropriate, as I intend to reach only the level of detail I had in the original project already, which took thirty hours, and am not creating a sophisticated military simulation.

Goal Two: Object Oriented Design Patterns & the Unified Modelling Language

The obstacle is my project development slows once it gets to a certain level of complexity. My lack of upfront design causes an ‘ad hoc’ approach to further development. This often causes tight coupling between objects, reducing the objects reusability elsewhere. I refactor projects often, slowing the addition of new features. I tend to use complicated solutions due to my lack of knowledge on established, software organisation techniques. I frequently lose touch with how a class is interacting with other classes.

This obstacle exists because I did not uncover guidance relating to the overarching techniques of program design until experiencing class coupling and performance problems in my projects. I found this video (Christopher Okhravi. 2017) that introduced me to Design Patterns.

Object Oriented Design Patterns are proven, reusable solutions to common programming problems. An example of a common pattern used in games is the Observer. Numerous objects register with some class being observed. If it changes state or a specific event is triggered, the Observers are notified and can respond independently.

The Unified Modelling Language, a general purpose, visual development language that covers a broad range of planning diagrams, will help me organise my thoughts and designs on paper. I could use this, and the patterns I learn, to express better object-oriented designs.

This is crucial to my goal because without an understanding of this area, I will find it more difficult to plan solutions and communicate the construction of immersive and detailed games. During the Game Jam project, I failed to complete a working prototype. I believe this was due to a structural deficiency that caused the project file to irrecoverably crash.

I can learn the patterns and UML because I have demonstrated an ability to create projects with complexity although it’s clear that I need training in how to manage that.

I will know that this approach is working when my programming solutions are appropriately complex, robust, decoupled designs that solve problems at the right level of abstraction expressing them in UML before successfully coding them. 

Smart

Demonstrate the Object-Oriented Design Patterns from the book (Gamma et al., 1995) using UML and C++ console applications so I have more options when designing classes and class interactions.

Measurable

The goal is complete when I have UML plans and a console application for each pattern.

Achievable

This is the next logical step and I already have a beginner to intermediate skill with C++.

Relevant

I wish to create complex game systems that will likely require some upfront design, documentation and communication.

Time Bound

I will complete one or two patterns per week and all twenty-three in twelve to fifteen weeks.

Goal Three: Agile

Image from here

The obstacle is that my knowledge of Agile and its application in a software development project is fractured and incomplete. It’s important to complete my knowledge regarding Agile because it is the most common project management paradigm in software development today and I will need to collaborate effectively using it.

Currently I have some success using Kanban, managing Serial Link based on what I learned from the book Agile Project Management with Kanban (Brechner and Waletzky, 2015). However, the project lacks User Stories, a way to encapsulate what a user gets from the system at a higher level of abstraction. I’m focused on the technical delivery of features, almost in isolation. I don’t use Sprints which are periods or two to four weeks in which a selection of User Stories are delivered. Because of that, I don’t hold Retrospectives, a reflection regarding the success of the Sprint. This could be costing possible improvements in many areas of the project and my practice.

My incomplete knowledge has come about because I’m relatively new to software development and hadn’t experienced Agile before. Being introduced to the methodology previously, it was one of many skills to learn. Due its intangible nature, I focused more on skills that could produce visible or demonstrable assets, like game mechanics.

The challenge is to manage the development of the Hostage Rescue game, discussed earlier, with Agile methodologies. The deliberate practice I will complete will be two-fold. First, I will take a course that teaches the principles more completely (David Starr. 2010). Afterwards, I will manage the Hostage Rescue development using Agile.

This practice solves the challenge and removes the obstacle by allowing me to manage a new project, start to finish using Agile principles that I will study up front and then review along the way. By the end of the project, I should have been able to identify and solve the weaknesses that my incomplete knowledge caused. 

This practice will be working when I know the status of the project in terms of work completed, work outstanding and progress made through the current sprint. Ultimately, the delivery of the Hostage Rescue prototype will be the conclusion of this challenge.

Specific

Manage the development of the Hostage Rescue project using Agile methodologies I learn so I can understand the methods more completely.

Measurable

The successful completion of the Agile course I will engage (David Starr. 2010) and the artefacts that are created such as Use Stories, Sprint plans, records of Retrospectives will serve as measure this challenge. The completion of the Hostage Rescue project is also a measurable activity.

Achievable

This is achievable as I am comfortable that I understand Agile at a broad level. I have some information already and am practicing some of the methods.

Relevant

Its highly relevant as the methodology is used extensively in software development.

Time Bound

The Hostage Rescue project has one-hundred hours of development time and the Agile practice will be a part of that process, though I expect to complete the course the day that the project begins.

Goal 04: Animation

Image from here

The obstacle I face with this skill is that I want to customise my projects with animation that I can’t produce.

Development in this skill is important as I want to be able to work independently on my own prototypes. I could also be more effective within a team if I’m able to edit animations myself.

There are two areas of my work currently being affected. First, I struggle to compose animation systems for characters in Unreal. I constantly experiment with animation assets and settings and cannot confidently use them in a predictable way. Second, key features in my projects would benefit from small animations and edits that I cannot do. For example, the Psychic Push in Serial Link that throws enemies. Only a hand push animation would be required improve the players understanding of the feature.

This lack of skill has come about because I have focused very tightly so far implementing game logic and creating a prototype of Serial Link among other coursework obligations while studying for the BA. September 2017 was the beginning of my game development education and I’m only now broadening my skill set past mechanical implementation work.

The challenge I am setting is to follow a beginner’s tutorial course on how to use Blender, a free modelling and animation software package, for asset editing and creation (Mark Masters. 2016). Then, my deliberate practice will be using what I learn to create and edit animation assets in the Hostage Rescue project detailed already and in Serial Link.

Completing the animation course will teach me the concepts and information that I currently lack so I can understand animation at a more technical level. This specific practice will culminate in my ability to demonstrate that I can use this understanding to create unique animations and use Unreal’s animation systems to implement them in a predictable way instead of the excessive experimentation I conduct.

This is an achievable goal for me because I have already managed to get some systems working without a good understanding of why it works. Animation is built upon logical systems and I have not struggled to learn about such systems. I also have a somewhat under-developed artistic skill that should be enough to build on to enable me to make basic animations I need for prototyping.

I will know that my practice is successful when I’m able to import existing, and create new animations in Blender, develop them and export them to Unreal, using the Engines’ most appropriate implementation system.

Specific

Take a course to learn about animation (Mark Masters. 2016) so I can customise them for current projects including Hostage Rescue and Serial Link.

Measurable

When I have completed the animation course and created and implemented at least ten animations, this goal will be complete.

Achievable

I understand what animation is, I lack the detailed knowledge and experience to create them. This goal will be an extension of my knowledge, not a new, unknown subject.

Relevant

I am producing game artefacts already and animation is a key area in making them visually appealing and a vital tool for communication to the player.

Time Bound

I will spend ten hours studying a course. I will then be developing the skill throughout the Hostage Rescue development.

Goal: Learn 3D Maths for Games

YouTube video here

The obstacle I face using this skill is I don’t really understand what I’m doing when I create logic that relates to characters and objects in 3D space. For example, I don’t fully understand how to use vectors, rotators and trigonometry.

A degree of mastery of this skill is important because I want to build complex systems that enable assets to interact with each other and the virtual world. Maths is a fundamental skill for a game programmer as it deals with the analysis and manipulation of the game’s most basic building blocks (Jason Gregory. 2009).

Currently, I use combinations of Blueprint nodes, the building blocks of the scripting system, that I have picked up from example content that solve operations like line tracing and extracting the direction some object is facing. But I don’t deeply understand the foundations of what’s going on and would certainly struggle to explain it in clear terms. I often experiment excessively to get the result I want, and I would prefer a high degree of predictability instead. This prevents me from creating more interesting behaviours and interactions and slows down the completion of work.

Some of these things are GCSE level math problems but due to a difficult childhood, I was less than attentive at school. I never learned about vectors, trigonometry or linear algebra for example. I have picked up what I can from tutorials, but not yet studied the issue properly. I would like to address that now.

I have recently purchased a book about math for game development (Lengyel, 2012). I will work through the book and study the information relating to vectors, matrices, transforms, geometry and visibility determination.

I will learn the theory and formula’s, completing the exercises in the book to develop my understanding. I will create a small Unreal C++ demonstration project that shows these things working.

This practice will solve the challenge and remove the obstacle by enabling me to learn the formulas and fully understand why they work, expanding my ability to think with them. Producing the Unreal project will be a tangible artefact that I can use to demonstrate that understanding.

This challenge is achievable because over time, I have managed to acquire a basic understanding of how some of these structures work, just through exposure to tutorials that are focused on teaching other things. I think that using a structured text, research and reaching out to peers and tutors should be more than enough to allow me to build a solid base of knowledge and understanding in this area.

I will know that this practice is working when I can quickly and predictably build logic that leans on vectors, rotators and so on and easily demonstrate and explain how it works.

Specific

I will learn how to use vectors, matrices, transforms, geometry math and visibility determination so can create more complex interactions and behaviours.

Measurable

This will be complete when I can explain and demonstrate the skills above and have completed the Unreal C++ project that uses them.

Achievable

I am already using some of this math in projects and have a basic grasp of how it works, I need to extend the knowledge that I am familiar with.

Relevant

Understanding these domains of mathematics is crucial to be an effective game play programmer as they are the fundamental tools that allow Actors, any object in a scene, to be spatially organised, queried and manipulated

Time Bound

This will be completed in fifty hours and is a long-term goal. I expect this to take around eight weeks to complete.

References

Brechner, E. and Waletzky, J. (2015). Agile project management with Kanban. Redmond, WA: Microsoft Press.

Cpt. Trips. (2017). UE4 Performance – BP vs C++ vs Blueprint Nativization | feat. Multithreaded Tick. Available: https://www.youtube.com/watch?v=8gVixDglpQ4. Last accessed 10th Apr 2019.

Christopher Okhravi. (2017). Observer Pattern – Design Patterns. Available: https://www.youtube.com/watch?v=_BpmfnqjgzQ. Last accessed 10th Apr 2019.

David Starr. (2010). Agile Team Practices with Scrum. Available: https://app.pluralsight.com/library/courses/agile-team-practice-fundamentals/table-of-contents. Last accessed 10th Apr 2019.

Epic Games. (2019). Home Page. Available: https://www.unrealengine.com/en-US/feed. Last accessed 10th Apr 2019.

Epic Games. (2019). Frequently Asked Questions. Available: https://www.unrealengine.com/en-US/faq. Last accessed 10th Apr 2019.

Frank J. Mitropoulos. (2019). Beginning C++ Programming – From Beginner to Beyond. Available: https://www.udemy.com/beginning-c-plus-plus-programming/. Last accessed 10th Apr 2019.

Gamma, E., Helm, R., Johnson, R. and Vlissides, J. (1995). Design patterns, Elements of Reusable Object-Oriented Software.

Jason Gregory. (2009). 3D Math for Games. In: Game Engine Architecture. Florida, US: CRC Press. 359 – 414.

Lengyel, E. (2012). Mathematics for 3D game programming and computer graphics. 3rd ed. Boston, Mass.: Cengage Learning.

Mark Masters. (2016). Creating Game Animations in Blender. Available: https://app.pluralsight.com/library/courses/blender-creating-game-animation-2460/table-of-contents. Last accessed 10th Apr 2019.

Object Management Group. (2019). Home Page. Available: https://www.uml.org/. Last accessed 10th Apr 2019.

Taking a UML Course

The Pluralsight course can be found here

I have tackling the SMART goal for learning UML this morning and you can find that here. The problem that I am facing is that I need to be able to record my thoughts and ideas about how my software fits together. The need for this was highlighted is my game jam catastrophe! I think that the problem came about because when people (generally) talk about learning the code, they talk about learning a language and thats kind of the end of it. Well, I suppose that’s the beginning of it really and then once a person has a enough skill to get themselves in trouble with twisted logic and terrible dependencies, they go looking for a way to think more clearly. Well, thats where I am right now.

I have decided on two goals that I have discussed already (UML and Design Patterns) that should really help me with that problem. I am now learning the UML symbols and the various diagrams before I attempt to use it for my own designs. I expect that I will be able to sit with a pencil and some paper and put some of the thoughts that I have about how things should fit together on paper, which I hope would expose any poor or uninformed thinking at that stage rather that 20 hours into building something.

The next task that I have set for myself is to create some flash cards to make learning the names of all the elements of the ‘language’ a little easier and more thorough. From there, I will watch another tutorial that seems a touch more up to date, just to get a feel for the common things that the two presenters say, which will help me hone in on the things that are understood to be ‘standard’.

I think that this goal is progressing as expected really. I knew it would take a little while to learn and the terminology and the symbols and then there is learning how to think properly in the first place. Just because I learn some UML, I not equating that to automatically cleaning up how I think about dependencies and activities but it should be a good start. I may look at modelling the existing approaches that I am taking in Serial Link, just to see what sort of hot mess the diagram is once I’m done…

Touch Coding ;)

Dull, I know, but in there is a super power waiting to emerge…

The Problem

The problem at the moment is that although I feel quite comfortable on the keyboard when coding, I would like to feel a lot more able to hit the more unusual symbols without thinking so much. It may seem a superfluous skill but I learned how to touch type only recently and I can safely say that it has a very positive impact on my ability to complete written tasks faster, freeing up that time for, well, anything else. I also allows me to think more while I type and (in my opinion at least) better content in that work. I have a SMART goal defined for this task here.

So I want to do the same thing with the symbols, keywords and other punctuation needed for coding. I used to use the ‘hunt and peck’ method and although I was pretty fast, I had to look from the screen to the keyboard and back again all the time. Its surprising how interrupting that is, now that I don’t do it. I know already, from the little bit of past experience that I did get while failing my degree as a child and before writing that wrong in my old age (ha!) that the H&P method is even more inconvenient when trying the think about logic, keep your position on the screen and then find the pipe for that ‘or’ statement you are trying to write. I just want that sort of hassle gone if this is going to be a career for me.

Is it right? who cares?!

I do.

I want to be very clear that this is not about writing code faster so that I can write programs faster and ‘get through’ more stuff just to say ‘I’m done!’. I know already that would lead to sloppy, buggy stuff. The proof of that pudding is here in the other goals that I have set up for myself.

This is more about just reducing the friction of interacting with the keyboard. I am also thinking of coating all the keys in Teflon…

In the Past…

I learned about how to drill words, fragments of words and commonly used and combined words. Having seen that work really well before, I will be putting together a test sheet that covers all the things I want to learn. I expect that after drilling that document 15 to 20 times for about 15 minutes per session that my speed and accuracy will improve when I am coding.

I never spent long on drilling this stuff while I was learning to type and I won’t spend long on it here. The reason is not that I don’t want to spend a long time, it’s that this is the type of skill that is best built up over time with low exposure but very frequently. So something like 15 minutes per day, everyday, is a really good start. If I have time for more, I would do a morning and afternoon session rather than just do the time straight through.

Already doing?

I have already begun using the symbols and punctuation for programming while not looking at the keyboard and I know where they are, they just don’t flow naturally at the moment. I think that should I be able to improve this skill that I will simply be able to write code faster and remove an obvious barrier in the ‘Understand problem, conceive a solution, code the solution and test it’ chain. I have other SMART goals for the other areas in that chain.

The Docs themselves

I have now created 2 documents that I will test myself on and drill until I can see an improvement in the completion times and less tangibly, how I feel as I type them out; Are they still difficult? Which symbols and keywords am I still tripping up on? From there I will derive the next documents that focus on areas of weakness that I identify. REFLECTION BABY. I should be taking the tests tomorrow.

Emerging Technology

I am interested in and have the need to explore how AI in games is constructed and how I can use existing approaches in my games. Being relatively new to the field means that there are existing, well understood and popular ways to handle this problem and I would benefit from fully understanding those. The AI that I have used in Serial Link, the only game project that I have created AI for, is very simple. In fact it is very obviously too simple. Although I found much of the material from this weeks content very interesting and I talk a little about that below, I know that there are technologies like the Environmental Query System that are already present in Unreal and I think that its appropriate for me to focus on those at the moment. I have become increasingly guarded concerning the subjects that I agree to dig into, as it is very easy to found myself knowing a little surface information about a lot of topics but I don’t believe that gets me any closer to the goal that I have of being a professional games programmer.

This weeks course material was plentiful. There was so many interviews to watch and think about that I must admit, I should probably have watched them in two, even three sessions so as to get all of the benefit. I found that my eye was drawn most to the discussion around Artificial Intelligence and in particular how it can be used to learn from human players. The purpose is to have agents the use this technique behave in a more human way, complete with not just the moments of brilliant play but also the plentiful mistakes they make. This makes the game experience much more immersive particularly for adversarial games. Here, its difficult for AI programmers to create challenging, defeatable, and consistent yet a little unpredictable. On the other hand, nothing annoys players more than a stupid side kick character who is constantly in the way and reduces the quality of the players experience rather than enhancing it.

The particular flavour of this approach that I liked was Genetic Programming. The reason I like this is the resulting code generated from the learning process reminds me of Behaviour tree nodes from Unreal. I have not delved deeply into this because I have already committed to more work than I think I can complete but based on the presentation by Swen E. Gaudl, it seems that the developer is left with nodes or ‘genes’ that are interchangeable and customise-able. I would very much like to break into Machine Learning in some way soon and the thought of having AI agents who are appropriately skilled and feel human is very interesting. There is a barrier to me using the particular frameworks that he talks about in that I don’t know how the code in Java. However, I am sure that this is a paradigm at least as much as it is a framework and would not be surprised to find this approach in play using other languages. I will continue my learning of C++ and once that is more up to date, I could consider Java if needed although I have already expressed the need to move from C++ to C# in order to use the Unity game engine.

As for where I am in the course right now? I have posts covering the work on the Battery Collector Unreal tutorial and the creation of a SMART goal for understanding animation. I also cover a presentation that was suggested to my by Al at the Games Academy, that talks about whats going on behind the scenes with Git.