For the last two years, I've basically been in an ever increasing spiral of depression over the fact that I hated my job and had grown to hate the menial work of programming that pretty much consists of 80% of all work. I jumped around on projects and new jobs trying to deny it, to find some kind of secret sauce that would fix it all ("Maybe I just need a different environment, maybe I need to get away from this shitty code base."), and it only served to make me want to wall myself in my room and never come out again.
So I quit. I'm going to quit programming for a living. I haven't had any fun programming in the last 3 years because I've been too caught up with programming for work that when I get home I'm spent. I might end up flipping burgers, or I might end up a freelance photographer, or something. I don't really know right now. But I'll be damned if I write another God damned bug ticket or estimate another iteration or deal with another pedantic asshat who won't shut up about the differences between classes and objects, even though I know what they are and just misspoke that one time, "would you please shut up, I'm trying to actually get to a point here".
I've got my rent covered for the next 3 months, I've got a friend willing to put me up after that, of the stuff I have I can probably sell a lot of it because I don't actually use it that much, and there are plenty of ways to make some spare cash on the side. We'll see what happens.
- Viewing Profile: Reputation: capn_midnight
About Me
Inveterate hobbyist, portensible software engineer, ostensible photographer, and stalwart events coordinator for @hive76
Community Stats
- Group Members
- Active Posts 15,223
- Profile Views 4,727
- Member Title GDNet+
- Age 30 years old
- Birthday November 24, 1982
-
Gender
Male
-
Location
Philadelphia, PA
Awards
-
Awards
Silver Level Benefactor
Donated to Charitable Cause
1226
Excellent
User Tools
Latest Visitors
#4774640 Quit my job today
Posted by capn_midnight
on 15 February 2011 - 02:59 PM
#4635058 How do you keep focused on your code?
Posted by capn_midnight
on 16 April 2010 - 12:06 PM
I follow a basic execution process called the OODA Loop. Extreme Programming, SCRUM, whatever-we're-calling-the-process-today, are all just different tools (stand-up meetings, TDD, pair programming, etc) plugged into this model.
I use it at home and I impose it on my team at work (they don't specifically know this is what I'm doing, but neither is it important or necessary that they know, they just do what I say and it happens). There is no one starting point for all of this, there are multiple sub-processes that occur in parallel and overlap each other. The major driving process is the largest iteration loop -- once every two weeks we set milestones for releases. Usually this is costumer-driven, either from discussing needs with the sales managers or reviewing demos with us, but sometimes I set them based on what I know needs to be done just to make the project work.
Once a day, I enumerate our tasks, based on our milestones. It works out to be a typical stand-up meeting. I set priority for the tasks, then delegate the tasks to my teammates and myself appropriately to keep us all busy and to ensure the highest priority tasks get done first. If we run out of tasks... wait, that's never happened. These tasks are anything that needs to be done, from making policy decisions on security protocols to specific defects in the bug tracker to scheduling time to test the project.
Multiple times per day, we complete tasks and remove them from the task list. We keep each other informed on what tasks are completed when they are completed. Even though tasks are assigned, the task board is open, so if someone runs out of tasks, they go to the board to find more on their own. Sometimes, if certain tasks get done earlier than expected, or are taking longer than expected, I will reshuffle the priorities and assignments to account for the change.
We perform testing and have demos and discussions with the client to see where we are with regards to meeting their needs. This often changes over time, either because the client didn't know what they initially wanted, or because they changed their mind. It doesn't matter, we change direction as quickly as possible. Never dwell on what those changes mean. You never know from the start what the project will turn into. It's better to change quickly and early when you get more and better information than to worry about how wide sweeping the changes are. The fact that change is destructive is beside the point, what you worked on yesterday has no bearing on today, you should only care about getting the project done.
I say this because humans in general have a problem with getting fixated on sunk costs. Say you go to a movie, pay $8.00 to get in, and find out in the first 10 minutes that the movie sucks. What do you do? Do you stay because you already spent the money and you'd be "wasting it" if you left? Or do you leave because that money is gone no matter what you do and nothing good will come out of watching a crappy movie? The best decision is to leave before the crappy movie sucks away more of your life, but most people don't do that because people give too much credence to the past.
The point of how this applies to programming, especially with personal projects, is that you will get to a point where you realize that you made a fundamental design mistake early in your project that is preventing you from progressing. You will be tempted to work around the mistake because it would be a "waste" to throw away all of the code you wrote. But it's not a waste, you've already spent that time, and the design flaw is still there. Eventually, you'll start to find excuses not to work on the project because you dread approaching the design flaw. The longer you live with a design flaw, the more it costs you.
All that matters is the end result of the project. Code boldly. Do not be afraid to make mistakes. I see a lot of beginner programmers dead-lock on coding because they can't figure out "the right way" to do something. Nobody knows the right way. We have ways that have worked for us and we know that other ways won't work at all, but nobody has a definitive "right way" to do things. You *will* make mistakes, so it's better to reach those mistakes quickly, learn from them, and move on.
Observe what needs to be done, Orient yourself to the path of completing those tasks, Decide on what to do and when to do it, and Act on those decisions. Iterate and recurse this process.
I use it at home and I impose it on my team at work (they don't specifically know this is what I'm doing, but neither is it important or necessary that they know, they just do what I say and it happens). There is no one starting point for all of this, there are multiple sub-processes that occur in parallel and overlap each other. The major driving process is the largest iteration loop -- once every two weeks we set milestones for releases. Usually this is costumer-driven, either from discussing needs with the sales managers or reviewing demos with us, but sometimes I set them based on what I know needs to be done just to make the project work.
Once a day, I enumerate our tasks, based on our milestones. It works out to be a typical stand-up meeting. I set priority for the tasks, then delegate the tasks to my teammates and myself appropriately to keep us all busy and to ensure the highest priority tasks get done first. If we run out of tasks... wait, that's never happened. These tasks are anything that needs to be done, from making policy decisions on security protocols to specific defects in the bug tracker to scheduling time to test the project.
Multiple times per day, we complete tasks and remove them from the task list. We keep each other informed on what tasks are completed when they are completed. Even though tasks are assigned, the task board is open, so if someone runs out of tasks, they go to the board to find more on their own. Sometimes, if certain tasks get done earlier than expected, or are taking longer than expected, I will reshuffle the priorities and assignments to account for the change.
We perform testing and have demos and discussions with the client to see where we are with regards to meeting their needs. This often changes over time, either because the client didn't know what they initially wanted, or because they changed their mind. It doesn't matter, we change direction as quickly as possible. Never dwell on what those changes mean. You never know from the start what the project will turn into. It's better to change quickly and early when you get more and better information than to worry about how wide sweeping the changes are. The fact that change is destructive is beside the point, what you worked on yesterday has no bearing on today, you should only care about getting the project done.
I say this because humans in general have a problem with getting fixated on sunk costs. Say you go to a movie, pay $8.00 to get in, and find out in the first 10 minutes that the movie sucks. What do you do? Do you stay because you already spent the money and you'd be "wasting it" if you left? Or do you leave because that money is gone no matter what you do and nothing good will come out of watching a crappy movie? The best decision is to leave before the crappy movie sucks away more of your life, but most people don't do that because people give too much credence to the past.
The point of how this applies to programming, especially with personal projects, is that you will get to a point where you realize that you made a fundamental design mistake early in your project that is preventing you from progressing. You will be tempted to work around the mistake because it would be a "waste" to throw away all of the code you wrote. But it's not a waste, you've already spent that time, and the design flaw is still there. Eventually, you'll start to find excuses not to work on the project because you dread approaching the design flaw. The longer you live with a design flaw, the more it costs you.
All that matters is the end result of the project. Code boldly. Do not be afraid to make mistakes. I see a lot of beginner programmers dead-lock on coding because they can't figure out "the right way" to do something. Nobody knows the right way. We have ways that have worked for us and we know that other ways won't work at all, but nobody has a definitive "right way" to do things. You *will* make mistakes, so it's better to reach those mistakes quickly, learn from them, and move on.
Observe what needs to be done, Orient yourself to the path of completing those tasks, Decide on what to do and when to do it, and Act on those decisions. Iterate and recurse this process.
#4314148 Creative ways to get currency into a game economy?
Posted by capn_midnight
on 15 September 2008 - 06:33 AM
If you wanted to take on a real challenge, you could simulate a reallistic, free market economy. In the real world, "currency" is any convenient item for trade with a relatively stable and agreed-upon value. We use currency because direct barter is inefficient. Any good currency is:
1.) Relatively rare. As Iron Chef Carnage wrote, it's about the effort it takes to obtain it. If it takes almost no effort to obtain a certain amount of the currency, then it's a pretty useless currency. Dirt would be bad. Water might work if our society were severally water restricted. Silver and Gold ended up being used in the real world because it takes considerable effort to mine it out of the ground.
2.) Yet, relatively available. If a currency is too rare, it's too valuable to trade easily. The value of the most basic unit of currency must be small enough to buy the cheapest item. You can't buy a loaf of bread with diamonds, because the smallest diamond is still much more valuable than even a large loaf of bread. Silver ended up being used more often than Gold because it was more readily available than Gold -- an important consideration for a growing population.
3.) Stable in value and ultimately usefull for some purpose in its own right. Again, it's about the effort it takes to obtain a certain amount of it. If obtaining the currency becomes easier over time without any required increase in the skill of the user, then your economy won't be able to produce enough goods to meet demand unless the price of the goods increases. Paper "fiat" money only works because people expect it to retain its current value, despite the readily available evidence that it has never, does not, and will never remain stable in value. See WWII era Germany or the recent situation in Zimbabwe for what happens when currency inflates out of control. During WWII, inflation had gotten so out of control in Germany that people were burning paper currency notes for heat because it burnt longer than the wood or oil they could buy with it.
4.) Relatively durable. This shouldn't be a problem for a game. But in general, something that rots or degrades does not make a good currency. High-quality cheese would make a bad currency, both because it rots and because it can be readily consumed with very little utilitarian benefit gained.
5.) Generally desirable as a medium of trade. Basically, everyone has to agree that the currency is "good". In general, if the market has no confidence in the currency, then the people will not use it; they will find a more suitable replacement regardless of what you do. If your users are expected to trade gold for rare items they find, but you violated one of the previous 4 rules and have made your currency unsuitable for trade, then the users will not want to trade gold for their items.
These "rules" have an interesting implication. Given no pre-defined currency, people trading in a free market will define their own, and it will naturally adhere to the points I defined. One must only implement a system for trade and a system for advertising item prices in whatever desired conversion rate to any other item. One item will almost surely be in nearly universal demand, yet in relative scarcity in relation to other items in universal demand. And where someone does not actually want the item itself, they would still collect it because so many other people want it and will readily trade for it.
1.) Relatively rare. As Iron Chef Carnage wrote, it's about the effort it takes to obtain it. If it takes almost no effort to obtain a certain amount of the currency, then it's a pretty useless currency. Dirt would be bad. Water might work if our society were severally water restricted. Silver and Gold ended up being used in the real world because it takes considerable effort to mine it out of the ground.
2.) Yet, relatively available. If a currency is too rare, it's too valuable to trade easily. The value of the most basic unit of currency must be small enough to buy the cheapest item. You can't buy a loaf of bread with diamonds, because the smallest diamond is still much more valuable than even a large loaf of bread. Silver ended up being used more often than Gold because it was more readily available than Gold -- an important consideration for a growing population.
3.) Stable in value and ultimately usefull for some purpose in its own right. Again, it's about the effort it takes to obtain a certain amount of it. If obtaining the currency becomes easier over time without any required increase in the skill of the user, then your economy won't be able to produce enough goods to meet demand unless the price of the goods increases. Paper "fiat" money only works because people expect it to retain its current value, despite the readily available evidence that it has never, does not, and will never remain stable in value. See WWII era Germany or the recent situation in Zimbabwe for what happens when currency inflates out of control. During WWII, inflation had gotten so out of control in Germany that people were burning paper currency notes for heat because it burnt longer than the wood or oil they could buy with it.
4.) Relatively durable. This shouldn't be a problem for a game. But in general, something that rots or degrades does not make a good currency. High-quality cheese would make a bad currency, both because it rots and because it can be readily consumed with very little utilitarian benefit gained.
5.) Generally desirable as a medium of trade. Basically, everyone has to agree that the currency is "good". In general, if the market has no confidence in the currency, then the people will not use it; they will find a more suitable replacement regardless of what you do. If your users are expected to trade gold for rare items they find, but you violated one of the previous 4 rules and have made your currency unsuitable for trade, then the users will not want to trade gold for their items.
These "rules" have an interesting implication. Given no pre-defined currency, people trading in a free market will define their own, and it will naturally adhere to the points I defined. One must only implement a system for trade and a system for advertising item prices in whatever desired conversion rate to any other item. One item will almost surely be in nearly universal demand, yet in relative scarcity in relation to other items in universal demand. And where someone does not actually want the item itself, they would still collect it because so many other people want it and will readily trade for it.
- Home
- » Viewing Profile: Reputation: capn_midnight

Find content