Developing An Online Game

To be honest, I have developed an online browser based game and worked on a previous browser based game, both written in PHP. Neither were successful, but I don’t think that is the point of developing an online browser based game. Above all, the goal should be to have fun and create a fun game. If you so happen to make money off of the game, then all the better. I had wanted to start a series and got up to user management. Really, the details were more abstract than I would have liked. The page is one of my most popular pages.

I think the problem was that I started the series at a point where I assumed the reader had an abstract of the game, planned out the details, knows what the game is going to be, etc. Building a game doesn’t start at the coding stage and I think that is where I made my mistake. Any PHP programmer can develop a PHP game. It is similar to any other PHP web application, except the forms interact and modify what other visitors are seeing and the data persists for all visitors. The coding can be as simple or complex as you are capable of developing.

A well developed game, takes imagination and planning. The more planning the better the initial iteration of the game will be. I think some people make the mistake of thinking that you have to develop every aspect of the game before entering production. Certainly, if you were developing a game for a group of programmers at a company like EA, then yes, you’d want to do that. The problem is often one of motivation and it depends on how motivated you will be spending weeks or months designing the game.

The other problem, and I think agile project management helps out vastly in this area, is actually developing a plan that can be implemented. A novice programmer is not going to be able to put together a SVG canvas or WebGL project overnight, unless that person is extremely motivated and intelligent or has a ton of help from an experienced programmer. I suppose the point I’m trying to make, is that I’ve written many of designs that just weren’t implemented, because my vision wasn’t possible at that time.

What does it mean when what you designed is not possible? It simply means that you need to work around the limitations until later. Be creative. There are many solutions to difficult problems.

Farming Sim Example

I have a game that I’ve been designing for a while now. The reason I haven’t yet developed it is because I’m not experienced enough to pull it off. The problem is that I want to design the game to where you have an near infinite land mass for planting crops and placing buildings and whatever else will be in the game. I wish to have this to be graphical and where you can place the elements visually. One solution that I’ve had for a while is to have it all text based. You have crops, buildings, etc and you simply set a quantity. The crops, buildings, etc have a predefined area that they take up and once you’ve filled your current land, you will not be able to make any more purchases.

I could implement this basic solution now. The reason I have no desire to, is that it wouldn’t be fun for me. I don’t want to a game where it is text-based. I want to play my game graphically and so I will not implement a simple idea to rush this game out. If I were to do it for the money, I would attempt to do it. However, this is not 2000s or pre-Flash and Facebook game. The problem is that if I were to do a text-based game like this, I doubt many people would choose to play the game over Farmville or another similar game.

Possibly Related Posts:


Hard Drive Error

Update: I tried the freeze the hard drive trick and the swap hard drive circuit board and neither worked. My guess is that the hard drive is EOL. Well, lesson learned and I’m glad that there was nothing important on that drive. Meh, in 6 months I won’t even think about it.

Several days ago, while I was away having eye lasik surgery, one of my hard drives failed. The probable cause was from not plugging in the computer to the battery backup UPS and from constant hard restarts from the power failing from multiple thunderstorms. The final cause was that the hard drive was 3 years old and nearing end of life.

Good News: Drive does not contain any important data or information that I can remember. I believe I might have duplicated data across drives, so there might be music files on this drive that I also have elsewhere.

Bad News:

  1. The 1.5TB drive was not backed up.

    If I remember correctly, the music files that might be on this failed drive, was copied and duplicated elsewhere for redundancy sake. The iTunes information probably will be located again on the iCloud when I sign up for that, so that music is not lost. Any documents I had on this drive was not really important enough to keep. I didn’t have all that many documents or photos on this drive, so I was extremely lucky with that.

    I do need to double check and look at my other drive and make sure that I have everything. It is possible that since most of the files were copied from other existing drives that I’ll be able to (maybe) pull the existing older drive and pull the information off of that. The odds of that working is minimal since that drive may not exactly work after all of this time.

    It was an acceptable risk to lose everything since the data wasn’t important enough to warrant a backup. If I’m able to get the drive running, I’m planning on moving the documents first and then attempt to pull any remaining data off of the drive.

  2. Drive head appears to be failing or failed.

    I don’t think the drive heads crashed into the drive platters, so it might be possible to retrieve the data off the platters by replacing the heads, but that is not something I’ll attempt. If it is impossible to retrieve the data off of the hard drive then I doubt I’m going to spend the money to retrieve the information. I’ll simply pull what I can from the older drives and build up my collection again over the next few years.

  3. Other hard drive might be failing.

    I bought 2 1.5TB hard drives at the same time, 3 years ago. The second hard drive does have valuable information.

Lessons Learned

The only partial good news is that the hard drive that failed does not contain anything that I can’t afford to lose. True, it is inconvenient, but there are other solutions available that the data is not that big of a lost. After a few months, I’ll barely think about the lost. The other good news is that I’m finally getting my ass in gear and will buy a few externals for backing up my data. My photos, raw HD videos, documents, programming projects, other important files are all going to placed on the external after I buy it.

Right now, I’m going to back up my current existing drive to the 3 2TB hard drives and will replace the old 1.5TB with a SSD for primary boot drive. Once I receive the externals, I’m going to move my files to that as well. I think I’m also going to look at cloud solutions. I have about 3GB of pictures covering over 7 to 10 years of life. I’m thinking about uploading them to Facebook, Flicker, and maybe a data cloud service for the originals. I can’t afford to lose those pictures. As for the raw HD video. I probably can’t find a simple cloud solution that will store the RAW that is cheap. I have close to 900GB of RAW HD video.

I’m thinking about Rendering what I can to the highest quality and uploading to Youtube. That way if the raw AVC Video is lost, then at least the video still exists. I’ll probably upload my documents to Google Docs for storage and invest in a cloud data storage as well. The programming projects will probably be uploaded to github and regular cloud service.

I think the main reason I haven’t done any of this already, is time. Going through the pictures and uploading them takes time: tagging, cataloging, and finding pictures. Well, worth it, since it only needs to be done once. The problem for me is knowing which service will stand the test of time. I don’t want to invest in a cloud service that will die in 5 to 10 years. At least when I put something on a hard drive, internal or external, I know it will at least survive when I upgrade and buy a new one. Pulling from some cloud services are also difficult. If someone wanted to copy all of my pictures, they would have to go through each one and right click and save picture. I think in the future, this will most likely be made quicker and easier, but it lacking at the moment.

I’m lazy, if something is not immediately at my fingertips then it might not even exist. I don’t like having to go to a web site to see what pictures I have available. Many web sites do not allow you to reference pictures on other web sites. This should hopefully change in the future, but with all of the cloud services, it might be too daunting a task.

Solution

I’m freezing the hard drive and will attempt to plug the hard drive in after it is done. I bought some ice packs and I’m hoping that I’ll be able to get some extra time out of the drive before it warms up and fails again.

If this solution does not work, then I’ll be spending some time pulling as much as I can from past hard drives. I’m hoping SpinRite will work well enough in pulling the information off as quickly as possible. However, I might be better off attempting to load Windows and doing it that way. I’m not sure if SpinRite will allow me to chose which directories to prioritize. If I have 20 to 40 minutes, that is not enough to pull 1TB of data off of the drive. I’ll be lucky to pull the 100 to 300GB of existing documents, music and (paid) downloaded games from various online providers. I’m hoping that I’ll be able to pull the 100 to 300GB and catalog the remaining disk files. Probably should get that program ready to list the files on the drive.

I’ll also need to find a program that works better than the normal Windows move operation. I don’t want to start copying a file or directory only to find out that one file or directory could not be read and halts the entire operation. Update: I found UltraCopier and KarenWare Directory Printer.

Possibly Related Posts:


Starting D Port of Minecraft Proxy

I decided to take a break and write the networking code for the port of the Minecraft Proxy. I need to do some programming and I want to do a few experiments with D. I still need to buy the D Programming Language book, but for now, I’ll just make do with online documentation.

Goals

The goal for this weekend is to successfully get a “Hello World” application working. The second goal is to port the proxy network code from Java to D along with the multi-threading code. If the network code works fine and there is time left over, then I’ll start porting the Minecraft protocol library over and processing the data. I’m interested in seeing how the performance is for the networking code is and how much memory is used. The problem with the Java version is that an incredible amount of memory is used by default (not that Java uses all of that memory) and then it shoots up once the initial memory is used and more memory needs to be allocated.

I’m more interested in seeing the memory usage and also seeing how the idioms of D can improve the code implementation over Java. Well, I had wanted to start tonight, but I’m going to sleep.

I actually have two libraries for OpenGL, so I’ll have to evaluate the two and pick on that works well. I’ll also have to look into GUI either DUI or the other well known D library. I’m interested in whether the GUI handling in D is better than Java in that I can combine the OpenGL and multithreading of the network code with the DUI or another library. There were many problems with attempting to do this using Java and yes there are work arounds, but they don’t work well enough to justify doing so.

If the GUI and OpenGL code can be written together, then I want to start on my other master plan. That is to create a Fuzzy Logic and neural network AI code for having an account mine or help build. I think to start will be pathfinding and helping to mine. I’ll need to add code to allow for replying to chats and alerting that someone is talking to the Bot. Will make for a great research project.

Possibly Related Posts:


Users are our Masters

I used to live by these truths:

  1. Users are morons.
  2. Users are apathetic.
  3. Users only care about getting their job done and moving on.

After reading parts of GUI Bloopers and part of Web Bloopers, I think simply the perspective that the users are somehow at fault is incorrect. Actually, it has dawned on me a few days ago that really the problem is that the complexity of the system that I helped create was at fault because the user had to kept learning the system and even I had problems understanding how to use the system. If the user is failing to use the system correctly, then there is an usability problem.

Of course users are apathetic, they have a job or task to perform and if the system gets in the way, they will either use it to the best of their ability or not use it. It is obvious now, but really, it is frustrating as a developer because from my perspective, it doesn’t matter what I give the user, nothing seems to ever be simple enough. I can’t yet design a system where it simply reads the user’s mind and does the task. Maybe in the future, but providing an interface that is everything the user needs it to be and nothing more is really difficult.

I think the best UI I created was a calendar select that had 4 iterations before it is what it is now and I believe it is simple to use. However, I still run in that users forget that they can click on the days header. This could be fixed, I think by changing the mouse pointer to the hand and I believe I had it like that at one point. However, it doesn’t appear that people remember. It is frustrating to look at the user click many checkboxes in a row, when I created a control that allows them to select the entire row or month with a single click.

It is perhaps the first and only task I had where I talked to the user, created a task list and create an application to the users needs. After the first iteration, I gathered feedback for what could be improved and over time created a system that was good enough for the user. I even prototyped multiple controls until the best one was chosen. The problem was that one control took several weeks of time to create.

Certainly after finishing both GUI bloopers and Web Bloopers and maybe “Don’t make me think”, I’ll hopefully be able to create an initial UI that is about what the user is expecting. The problem is that there is never enough time to do proper user usability testing. Only one implementation is ever created for a given task and the user is expected to accept the design UI and all. I have insisted at times that multiple interfaces are created for the user to test and iterate from that. After reading the first sections of both books, I can already tell that whatever is done, gaining feedback is extremely crucial to developing usability in an application. There are certainly guidelines to follow, but not every interface is the same and sometimes complexity is required. When it is, developing for the user must come first.

Possibly Related Posts:


Software Testing 2nd Edition Book Review

Disclaimer This isn’t so much a review of the book as it is a personal discussion of the book. I want to take notes of what I learned from the book, so that when I read the book again, I can follow my notes and skip chapters that don’t matter or matter little.

I learned a lot from the book and it filled in some missing pieces of testing that I did not know or could not completely put in words. More than anything I think the first part of the book was worth the money spent. My one problem with the book is that it speaks often of spec, everything is predicated on a written specification. Well, I don’t usually work with a specification, so the majority of the book is not useful? Well, reading between the lines, I think the author understands this point and oral discussion may not be the best spec, but there are ways around not having a specification. The author does go into how to test when there isn’t a specification, which is useful.

The book is primarily based on software testing, but I think a lot of the techniques could be applied to web based testing. The fundamentals are good to know too. The book’s first part has a chapter on the development paradigms and I learned the most layman explanations for Waterfall, Chaotic and Agile. These were very well described and I used the information practically based on this book. I’m sure that there is more to each than what is described in a single chapter, but as a summary, the book did a very good job. Of course, once I start reading more about Agile, I might find the information lacking, but summaries are supposed to lack some information.

It is an interesting conversation to describe that you tested to pass or tested to fail, but there still might be bugs. Then clarify that it is impossible to say that all of the bugs are fixed. The book actually gives a better explanation, in the form of a graph describing the amount of time need to test something to be sure that every bug is fixed. Some things would require infinite amount of tests in order to be complete certain that there is not some bug affecting the code.

The book also gives a better way to test, which is to test the inner boundaries and outer boundaries. These give you the edge cases and you can assume that everything inner to the boundary will work and hopefully that everything outer is handled well enough. The book does go into security tests and other more specialized tests, but majority of them aren’t that useful to me at this point. They will be at some point. Really, I need to practice the basics before I attempt configuration testing or language testing.

Summary of the Book

  • Build a spec
  • Test to pass, then test to fail, but always test to fail.
  • Test off a spec
  • Automate, but still do manual testing.
  • You can’t test everything.
  • Everything can’t be fixed, fixing needs to be weighed with the priority and severity against the deadline.
  • The earlier a bug is found and fixed, the cheaper the cost to fix.
  • Outsourcing some testing, compatibility, foreign-language might be cheaper, faster and better than trying to do it in-house.
  • Working only within a spec, if it isn’t in the spec that it is a bug.

Possibly Related Posts:


Do I Code or Read?

I was contemplating this for a while. I guess the problem with why I don’t have motivation for programming is that I lack confidence that I’ll go down the so called correct path with writing code that would be reusable with multiple iterations of a project. I tend to have a higher personal standard than programming at work, since there isn’t a predefined standard for quality of code. It does tend to free up a lot of time pondering the right way to do something when the expectation is to just do it and doesn’t matter what the quality of the product. I don’t know, I’ve gotten better at writing modular reusable code at work, but some tasks require highly specialized code that once written can not be applied to other code bases without rewriting or heavy refactoring.

I have a high sense of pride with personal projects, because I want to scream to the world, “Hey, check this code out! I did this…” and I don’t want the first thing someone commenting on the code to say, “This sucks major balls!” That and my ego isn’t completely solid as to not fall over with major criticism. Well, I still have this problem with code and apt to defend any code I write with a passion. I realize this is the wrong way to approach opposition to my code, but well, I’m often not confident that the code is the correct way. It is both impressive and depressing to see someone write really beautiful code, but not understand the difference between the shit I wrote and crowning jewel the other person wrote.

I have a choice, I could either spend the next year or two writing shitty code until at some point I realize why my code sucks or someone comes along and shows me the error of my ways or I could just read a whole bunch of books from those that were in the trenches bleeding, sweating, failing and winning long before I even decided to enter this profession.

I guess I should have chosen the latter option sooner, but failing is a great learning experience. I enjoy doing it every day.

As much as I want to jump into coding, I think learning to be a journeyman coder and finally break out of the chains of a novice would provide a better experience than continuing with the false sense that I’m a master. I suppose I regret not realizing sooner, but at some point I lost perspective of where I was at and stopped growing. I knew people who fell into that pit and I vowed I would never follow in their footsteps. Realizing this, I think reading more and rereading several books in order to apply the knowledge will benefit me better.

Something tells me I should do both, but I usually go all out until I hit a brick wall.

Possibly Related Posts:


The Laws of Neomancy

During High School, I was fascinated with Geomancy type magic systems. You know, the Earth, Wind, Fire and Water primary systems that Fantasy books sometimes fall into. It didn’t quite occur to me that there was a system beyond that until I discovered Brandon Sanderson. I think it was more of a lack of imagination and more that it is truly really difficult to create a magic system that is unique and not totally stupid. Geomancy type magic systems also had a lot of depth and originality to them in the different rules that each Fantasy series would establish.

My problem was that I enjoyed Fantasy more when Magic has defined set of rules and is used often. I liked Circle of Magic series more than the Earthsea series, because I felt that magic in Circle of Magic was used more often. Well, the real reason was that reading Earthsea was more like a chore and I never finished book 3 and skipped to book 4. What I did like in Earthsea was the Necromancy type magic system and the difference between its necromancy and the normal D&D type necromancy of raising skeletons and undead.

This leads me back to Neomancy and I thought why not combine the two? Why not create a magic system that combines Geomancy and Necromancy? Well, I thought there are limitations.

  1. Geomancy and Necromancy are opposites. They are they Geomancy light to the Necromancy dark.
  2. Normally you only have one or the other in series. I think that given the complexities of having two competing magic systems that conflicts would occur naturally.

Discovering these limitations, I decided that it should be possible anyway and decided to come up with a magical system that did allow for both to exist. Oh, wait, I did come up with 5 other distinct magic systems.

  1. One was based off of the stars in a sort of Pagan ritual. This one would be extremely limited since it required time, preparation, and precise execution in order to perform spells. However, this was countered by almost anyone being able to perform the magic.
  2. Another was based off of the D&D magic system of warrior mages type magic. Not that I completely researched this form of magic from D&D books, I wanted it to be less restrictive and more enhancing of the warrior’s abilities. Sure, there will be fire throwing spells and water control spells, but most of the warriors will use regular swords and strength and use their magic to enhance how fast they move and ensuring that their sword doesn’t break.
  3. Nonrestrictive Geomancy magic. This magic system relies of how powerful the user is and what spells they know. I suppose it is like the Harry Potter or Tolkien magic system.
  4. Nonrestrictive Dark magic. Not quite necromancy, this dark magic is more about curses and well, I never really fleshed out what this system would be like. I think really I didn’t want to go into it that much. Just be something that is alluded to and in the background or part of the lore and history.
  5. I forgot. It has been a decade and I lost my notes.

That said, majority of the outlines doesn’t actually go into any of the other magic systems. The problem with having too many magic systems is that there is no way to describe them all. In the original outlines and drafts, they aren’t even part of the story in at the least the first book. I think it is okay to establish the magic systems or perhaps it might be better to simplify the systems to a mage based magic system a warrior class and then have necromancy, geomancy and neomancy.

Limitations

The limitations of geomancy and necromancy is what you can form in your mind. The other magic systems have spells that form the basis of the spell and allow the caster to not fret the difficult stuff. However, it does limit the caster to what the spell caster can memorize. A geomancy or necromancy can do whatever they can hold in their mind and limited only to their imagination and strength. Breaking the concentration of a necromancer and geomancer breaks the spell and often the spells are complex enough that the caster can be defeated relatively easily. I mean, this does sort of sound a little Harry Dresden, but meh, I do think that this is a fairly common limitation in many magic systems even predating The Dresden Files.

Even the most basic spell, the casting of orbs while simple and part of every caster spell list relies on mental capability. For a geomancer and necromancer to last long, they have to practice several basic, moderate and advanced spells so that they can quickly call them up when needed and with little to no thought. The least powerful regulate themselves to the basic spell and then for a fee will perform other spells. The more powerful will either help others or wage war with armies. The most powerful are usually loners traveling the countries either looking for trouble or helping when needed. The most powerful usually don’t need to worry about being killed, because there are few of them and they are well known. Usually, from having to kill quite a few people or destroy a few towns.

Spells

There are 3 levels of the spells and some can be used to offset the disadvantages of the magic systems.

  1. Orbs. The basic level is throwing orbs of magic at the enemy. These balls range in size and thus damage. They are easy to create once enough practice has been established and can be thrown quickly by experienced or even moderately skilled geomancy and necromancy casters.
  2. Mental. Again, the next step is forming the spell in the mind and then releasing the spell. If done carefully, a powerful spell could be casted without the enemy realizing what they are defending against. Necromancers can be deadly assassins, which is also why they are barred from entering some countries and would be killed on sight. Other nations actively hunt down necromancers and in some parts, geomancers too.

    There is a payoff, which is the more often the mental spell is casted, the easier it is to cast the spell later. Some advanced users can form part the spell in their mind for calling up and completing at a later date. Older spell casters can call up several complex and deadly spells very quickly.

  3. Rituals. Very rare, because it relies on special items and also either a necromancy or geomancy dagger. These daggers are very rare and if found by the other magic systems or anyone outside of the daggers magical system will seek to destroy the daggers. I never really created how exactly the daggers were created. I had a few ideas and one was metal smiths helping extremely powerful necromancer or group of necromancers and the same for geomancy. I think the problem would be that it would be relatively simple for recreating the daggers if this was the only requirement. I do think the character in the book does create another set of daggers with the help of a metal smith. Another idea was to only allow neomancers to create daggers and, or use a special metal that naturally has the properies inherit of necromancy and geomancy.

Politics

The point of Neomancy is to be rare and mysterious. Yeah, yeah, same old same old. The point is that it isn’t mysterious to keep the reader in the dark, the magic system is extremely simple, the point is that in the world that the character that uses the magic system is extremely dangerous to those that are able to do Neomancy. I won’t get too in depth on why this is because I’m still kind of fleshing out and revising a lot of the story elements so that they aren’t too complicated and dumb. The point is that the mage magic systems don’t like geomancers and necromancers and absolutely will not tolerate neomancers. In that they will actively seek out and find neomancers and kill them.

The problem I have is creating a dynamic where the mage magic system is not totally evil from the perspective of the reader and where neomancy is good. This is not the case and the main character who uses neomancy is not good. Far from it actually. I mean, what else would you be if you were hunted and hated by everyone, normal people and mages alike.

I don’t know, the recent outlines that I have planned sort of offset the neomancy character and bring forth the other secondary characters. Soft of Circle of Magic fashion and giving each character their own book and then ending with the Neomancy book. I’m not sure I want to write 6 books, because each story has to be interesting to write and to read. I had other ideas where I sort of do a multiple point of view characters like Wheel of Time, Way of Kings, etc but damn those tend to be extremely long stories with complexities that I’m not sure I’ll have fun mapping out and writing. I don’t think I’m that smart to be able to pull it off as well as I would want.

I’m also not sure how dark I want the story. With The Song of Fire and Ice and other books, I could just go all out, but I don’t want the book to be unreadable. The world building I had previously was, I think, too broad and too difficult to comprehend. I think I will instead work on developing the politics of one country where the main character and another secondary character interact and then branch off into the politics of the magic system. In this, I think having the interactions take place in schools could also add another level of conflicts.

I want to keep the world simple, because it is really the only way I could write. The problem is that I don’t want to write a long book, but I don’t want it to be too short. Writing is quite a bit more difficult, but I mean the systems still need to be developed even if all you are going to do is work within them and never tell the reader what the rules are of the countries and schools are.

The world is not cheerful, but I think borrowing from my other themes might mean something here. I think there is enough with the character’s backstory to provide some interesting flashbacks and insights into the politics.

Religion

There is a religion that the magic systems are based on. It isn’t really faith based as the religion origin are real in the context of the book and there are certain elements that I might keep and relate in the book. I keep going back and forth with whether I should describe the religion or not. It is silly really and since I’ve created the origin of the religion, I’ve since seen similar types of themes and I’m thinking about either not revealing the origins or recreating the origins. It is frustrating that I’ve thought of the idea, only to find out that it has been done a crazy amount of times. Hell, there are real world religions similar to the one I thought of.

Well, I think I’ll leave religion out of any book, I’ll develop this idea further in Spirit Keeper instead. I also don’t like how religion is described and used in fantasy and anime series. I’d rather magic be the religion and I don’t think it is wise to attempt to create a new religion for every story. Many fantasy stories do not even talk about religion or describe the world’s religions, so I don’t think I will here.

I will keep in mind that Neomancy, geomancy, necromancy and the other magic systems were formed out of the religion and are based in part on the religion. I never really imagined that the characters would need religion since everyone simply assumes it to just be. To them, religion is more science than faith, because the magic is living proof of the religion. Therefore there is no reason to build churches or pray to a god or gods, everyone knows that while they exist, they won’t do a damn thing.

Possibly Related Posts:


Read Clean Code: A Handbook of Agile Software

I’ve only read the Introduction, which is fairly long for introductions and most people would skip it. I suggest you read it, the book and more importantly the Introduction. The Introduction sort of the reasoning behind the book and for me was part of the reason I will finish the book. If the introduction is any indicator as to the contents of the book, then the stories, the explanations, and the reasoning is enough to justify buying the book. I learned a lot from the introduction alone and expect that had I read the full book that I would have learned a great deal more.

That said, the introduction of the book sort of gave proof and reasoning to a lot of what I’ve been attempting to say at work for how to code. I do not think the author would agree with me completely as the author, from what I could remember, is not as hardline as I was previously with my assertions at work. I do think that this book will be beneficial to me in describing the ideas I could not put in words before for how code should be written and hopefully the rest of the book does a better job of detailing how you should code clean code than say the “Beautiful Code” book that reads more like a book of Fables than a how-to programming book.

I will say that if your viewpoint with coding is GSD (Get-Shit-Done) than it probably won’t flow with your mindset. However, I don’t think the author is that far off from GSD. He even says in the introduction along the lines of it is better to get something done than to put something off to where it never gets done. I interpreted him as to saying that it is better to code something that is somewhat clean and can be made cleaner in the future from simple refactoring than to code it completely terrible and require a complete rewrite. As well as including that it is not wise to dismiss every solution simply because none of them are clean. The primarily job of a programmer is to provide solutions, and to not ideology affect our thinking too much.

Again, this is all from the introduction, so I expect the rest of the book is full of more gems of knowledge and experience. I expect I’ll learn a lot from the rest of the book and I think other programmers will too. Check Amazon for the book.

Possibly Related Posts:


5 Year Goals

Summary

I’ve heard the key to success is to have a 5 year plan. I suppose the reasoning behind this is that if you look 5 years into the future, then it is enough time to at least get started with a few of those goals. It is somewhat true, I knew in middle school that I wanted to go to college and I worked extremely hard to achieve that goal during high school. I also made damn sure I didn’t have any children during high school and well, that was a bit easier to achieve, sadly.

  1. Comfortable enough with Python to create a project from start to finish with very little to no additional support from reference material.
  2. Comfortable enough with JavaScript to develop WebGL and other solutions using JavaScript with little to no additional support from reference material and tutorials.
  3. Ability to create a GUI project using D programming language and, or Java.
  4. Command of CSS3 and HTML5 to create a web site that is standards compliant with decent to great usability and accessibility.
  5. Projects that include Web based and Software based solutions encompassing bug / project tracking, directory, mobile and Windows application.
  6. Up to a bachelors of Science in Programming
  7. Research and programming AI in both browser games and programming libraries.

I should also add finding a mate, marrying mate and perhaps having a child or two during this time. However, I think just finding someone that I enjoy spending time with is good enough for me during this time period as well. I’ll be 30 years old in 5 years and well, I do hope that many of these goals will be accomplished by then. I had simply 4 goals for the past 5 years: Find a programming job, find a mate, complete at least 2 browser games and buy a house. I only completed two of those: find a programming job and buy a house.

Goals for the Next Month or Two

I plan on starting two projects. The Projile Python project and an untitled Directory project written in PHP using the Fuel Framework. Technically, I’ve been working on Projile and learning more about Python from books and the online reference. Parts of my goal is already being in progress, but I need to focus more on reading, because I don’t want to start a project that will be totally shit and require a lot of rewriting to get the shitty parts out.

I plan on reading the following books:

  • Software Testing (2nd Edition)Read. An interesting book and I learned a lot of the methodology and terminology, but wasn’t really what I was looking for. I think really the gist of the book makes sense I need to focus on testing my code more and satisfying more conditions with my testing. I learned that I simply test to pass and I need to practice test to fail to be a better tester.
  • The Pragmatic Programmer – A classic that I have yet to read. The next book I’ll be reading.
  • The Mythical Man-Month – Another classic that is next on my list to read after the Pragmatic Programmer.
  • Lessons Learned in Software Testing – Started reading this book, but I think I’ll simply go through it slowly and see what I can learn from its contents.
  • Predictably Irrational – Doesn’t really have anything to do with programming per se, but the concepts will hopefully help me market my products better and develop products that people are interested in.
  • Freakonomics – Another marketing book dealing with selling a product and how consumers react. A good book to read and see where the concepts can be applied.
  • Clean Code – A really good book that I started reading, but dropped a few months back. I think I’ll pick it back up when I start reading more books on Agile project management.
  • Expert Python ProgrammingRead. Well, technically, I haven’t finished the book, but I’ve read the important parts and could read the parts I skipped when I need them.
  • Quick Python Book
  • Python Pocket Reference
  • Python Essential Reference
  • Python Algorithms – Really, I think this book will be the next one I start on for learning Python. I need to get in the groove, so to speak, of thinking in the way Python works as opposed to attempting to apply my PHP or Object-Oriented programming paradigms and practices over to Python. I think this is part of the reason I don’t want to start programming python is that I fear it would be the wrong way and I’ll have to rewrite it all. Quite a bit demotivating, but I think once I do get into the Way of Python that Ruby and other languages like Python will come easier and also be able to apply some of the styles from Python to PHP, Java, etc.
  • People Styles at Work – I’m a terrible people person. Along the same lines of “How to Make Friends and Influence People” which I need to listen to again and quite possibility as much as possible. The issue at hand is that I don’t handle people very well and part of my journey so to speak is learning how to treat people with respect, even when I don’t feel like doing so and not burning bridges. My experience with WordPress has taught me some of this the hard way, but the next community I join, I don’t want to go in swing shit and expect to repair bridges down the road. If I join the Trac or Fuel Framework community, then I think this book and others will at least help with getting my point across and hopefully treat people in a respectable matter.
  • Design Patterns – There are quite a lot of books. I’ve already read one book dealing with a few design patterns for PHP. I need to get into the Gang of Four and the other book. There are other books written for Python and I suppose simply generic books like GoF and the other.
  • Algorithm Books – Algorithms are great for not reinventing the wheel and have it suck. Some algorithms are so common that many people have spent years refining them. Learning from them will help me be a better programmer.
  • Math and Scientific Programming – I’m really, really good at math. What I’m not so good at is remembering formulas. I’m planning on reading a few books on the basics Algebra and hopefully work my way up to Calculus and or Geometry. There is a Math and Physics book for game programmers that I think will at least serve as a reference book for some of the more common ones. The problem is that really you need to use them in order to remember them, but I think applying some of the concepts in reporting and statistics will also allow me to create better programs and I need to study more of that.

    Brushing up on the formulas, basic concepts, and more advance concepts will help when I start focusing on AI, which is heavy on math and when I start working on reporting and statistics.

  • Don’t Make Me ThinkRead Yet another area I’m terrible at. I’m not a designer, but I guess parts of my failing is never really focusing on usability. I plan on rectifying that mistake and spending more time creating different prototypes and usability testing until I master enough of it to where I don’t have to spend months to develop something.
  • Web Design Books I may be terrible at web design, but there are concepts and rules that I should be able to learn that will at least get me part way to a decent designed web site that is usable and decent enough to look at to where a designer can come in and make it pretty.
  • JavaScript Books – The problem with JavaScript books is that they don’t go into depth in to the internals of the language. They mostly are a primer of the same topics over and over again. Reading them doesn’t give you the tricks and hacks that the developers of jQuery were able to put together. Most of them don’t even go into that much develop of scoping, it issues, its tricks and workarounds. A lot of the books I’ve read at least barely focus on object-oriented programming in JavaScript, focusing instead on mainly procedural snippets. I’m sure part of my problem was that I never bought an “Advanced” JavaScript book and I hope that these issues I’ve had prior were from the overall past lack of professional and advanced topic JavaScript books. I hope the money I will be spending won’t be going to waste and won’t be a repeat of information I could get with a simple Google search.
  • Agile Project Development – Research for Projile bug and project tracker and well, I should be able to learn a lot and hope to apply some of the concepts to motivate me to work on and complete projects.

Well, I’m not going to spend all of my time reading and even if I did, I doubt I’ll be able to read, comprehend and apply the concepts in the books. I do hope to read as much as possible in these given subjects and actually finish the books in the list. I do like reading and I can always find time to pick up a book and read. I do desire to at least start the directory project and experiment with prototyping some things for Projile.

Next 6 Months

Finish more books and reread some of the books above for a second or third time. It is an ongoing process and something I’ve always attempted, but it is hard to stay with it. If you are reading, then you aren’t programming and you want to be reading when you are programming and programming when you are reading. I think my goal should be to read one computer programming or a book helpful to programming, like math or marketing or how to talk to people and not come off as an asshole a month. So that is 12 books a year for 5 years or 60 books. A completely possible and practical task that will further my knowledge of my field. Of course, I’ll be reading upwards to 20 to 30 books within the first month alone, and hopefully I read more than 60 to 80 books. The field is constantly changing and it is a battle to stay current. For the past 4 years, I’ve been negligent and I feel ashamed.

I want to have both the directory project and Projile project usable to some degree, even if it is simply the installer for both. I’m expecting the directory project to progress a lot faster since it will be using a language I’m extremely comfortable with and with MVC framework that enables rapid prototyping. The scope of the directory project is also limited for now until either I decide to give it away for free or sell it. If I plan on selling it, then I’ll want some funding. I’m probably going to go forward as if it is going to be a service and a paid product.

I at least want to start on the D language project of Minecraft Proxy project sometime within the next 6 months. I’m expecting that the release of 1.8 will push my motivation higher to the point where I either fix the Java version or attempt the D language version. At some point within the next month I’m going to prototype the socket layer of the code and see how well that works. If I can quickly and easily get that working, then it will provide enough motivation for me to focus on the OpenGL and, or Qt GUI layers. I’m hoping the D language version will be smaller, more efficient and faster. I have other plans, but this project is really a side project and I can’t plan on playing Minecraft or I won’t get any of my goals completed.

Next Year

In order to learn Python better, I either need to focus some time on Projile to keep my Python knowledge and experience fresh or I need to alternate between PHP and Python for each project I do. I think that for every other browser game I do, I could alternate between Python and PHP or if I continue to have a PHP job to do all of my hobby programming in Python. I need to get to the point where I have used every built-in module, created modules, eggs, and worked on at least 3 or 4 advanced solutions.

I also need to focus on working on open source projects that have experienced programmers in order to take direction and learn techniques from them. Trac seems to be a good candidate, but I need to see if there are other open source projects that have an established community and join them. It might not even be a web project and I think that might be better.

Sometime Between Year 2 and Year 5

I already have plans to write an Android App and a Windows Phone 7 App. I need to attempt to create a GUI application for Windows, Linux, and maybe Mac at least every other year. I already created one this year, but I’m still pretty novice when it comes to user interface design (the books above as well as future web application projects) and creating an installer. If and when I go back to school, I’ll be learning a lot more of C# and I should be able to apply the concepts and experience I learn in that language to D and Java.

I’ve decided that I’m probably not going to learn a whole lot of C / C++. The amount of time and energy required to get good at those languages probably is not worth my time during the next 5 years or 15 years. Focusing on D should help ease into C and C++. Some of my D programming will involve C programming, so I should pick up C experience, albeit very slowly. It is simply that the web application programming field is so large and is only growing larger in the next 5 years that I’ll probably never have to learn C / C++ and still be able to find enough jobs to hire me in the next decade or two. I do eventually want to learn those languages, but I hope by the time I do, that programming in the language will be so damn simple I’d wonder why I hadn’t done it sooner.

Possibly Related Posts:


Branson Tourism Center Looking for PHP Web Site Programmer

Branson Tourism Center is located in the Branson, MO, Ozarks area. Any PHP developer in Branson, Ozark, Springfield, Nixa, or north-western Arkansas or programmers looking to relocate to the area should send their resumes. Please call 417-334-4400 and ask for Tammy or Basil. If you want their email address then leave a comment and I’ll send it to you.

Requirements

  1. Must put that Jacob Santos referred you, on cover letter.

    I would appreciate this a lot and will be your friend forever [1].

  2. Must be a PHP programmer.

    Web site experience limited to HTML and CSS need not apply. The position demands someone with at least 2 years of PHP experience. You must know the language and you must be at least somewhat comfortable with object-oriented programming. Someone with a little PHP experience may be hired as long as they are bright, willing to learn and adaptable to changes to spec and deadlines.

  3. Must know MySQL SQL.

    All of the backend storage uses MySQL (MyISAM and some INNODB), so SQL is a must. However, most code will be using an ORM, however the candidate must be able to design a relational table scheme that is sane, justifying normalization and performance.

  4. Must have some working knowledge of SCM

    Subversion is used and will continue to be used. Basic knowledge of Subversion commands or TortoiseSVN experience is required. Training might be available for exceptional PHP programming candidates and those coming from other version control software.

  5. Apache, PHP installation and Linux experience recommended.

    It would be helpful and give you a boost having worked with configuring, installing and, or optimizing Apache and PHP installations. Majority of the PHP installations are on Linux, so knowledge of basic commands or ability to learn basic commands and roam Linux is a plus.

  6. Must not attempt to change the work environment.

    Going in thinking that you’ll change to GIT or Bazaar will not be appreciated during any interview. Furthermore attempting to transition to another database will also not be appreciated.

  7. CodeIgniter experience is a plus

    Any MVC framework experience will be appreciated and a bonus.

  8. Must know HTML and CSS and JavaScript

    Mostly jQuery for JavaScript, nothing too crazy besides AJAX pulling JSON and validation is used, so pretty simple stuff. HTML and CSS probably within basic levels. Must have an understanding of table-less designs, styles, etc. Pretty much if you’ve been putting together web sites using HTML and CSS for 1 year or so, then you should be good as long as you understand and know most of the tags and css properties and values. Mostly the designer will handle most of this for you, but you will need to be able to modify existing pages and create new pages without a tremendous amount of help.

Any Real Programmer

At this point any Python, Java, C# programmer that has real experience programming and can adapt their knowledge to another language quickly will probably be handed the job. However, you should have at least done a project or two in PHP before applying. It is not an immediate rejection to have experience in another language, but the project manager has to know that you will be able to code PHP without a lot of hand holding with teaching what variables, functions, and classes are. More than anything else, someone whom proves able to solve problems will most likely be hired.

Contract Work?

If you are going to contact about contract work, please place on the cover letter or resume that you are looking for contract work. Not doing so will potentially disqualify you from any future offers.

1 It should be noted that I actually won’t be your friend forever, just because you put my name on the resume. We’ll take it slow and see if a friendship works out.

Possibly Related Posts: