PDA

View Full Version : Programming is not easy.



KodiaX987
Aug 28, 2008, 06:55 PM
This is a callout to those would-be programmers and gamers who believe that any glitch in any game can be fixed with the press of a button and a few lines of code.

For starters, if you are reading this and are not a professional programmer, then chances are your programming experience is limited to simple database management tools, console calculators and Hello World. If at this point you are tempted to reply saying "Actually I do this and that and program all sorts of stuff even though it's not my job", please close your browser window, take the cable off your computer and go kill yourself. I don't need some fucking nitpicker to ruin my thread with his needless attempts to get the last word on an argument that's never begun.

So now, what's the average size of a program you've done at school? Possibly a few hundred lines, a handful of forms and some reference files, be it text or images, what have you. Bugs? Debugging is easy: you just have one main function, a few sub-functions, you can find and solve any problem in a manner of minutes.

Now, where did I go after computer school? I went to get a job of course!

My first job was in a team of three programmers in an industrial company. The database was so large that loading the record of all orders took a full minute. The application that everyone used to communicate with the database had been made in-house and the executable alone weighted in at 80 megabytes. The extensions and other resources popped that up to 100 MBs. But still, 80 megabytes of code and form design. Plus the database itself, with all its stored procedures and subfunctions. Plus the in-house programming language that was used to create the virtual blueprints to be sent to the cutting machine.

Now, somebody comes along and reports that a door hinge hole has been pierced 1/16th of an inch too far to the left. This is not good for us because the machine is supposed to be precise up to 1/1000th of an inch and all the other holes are in the right places. Henceforth, we look up the code.

That sort of problem, in theory, takes minutes to solve. Just tell the program to place the hole 1/16 inch more to the right and away you go. But that's without counting the possible ways this particular piece can be done:

-The dimensions are full-parametric. The larger a piece is, the more holes we add because a bigger door needs more hinges for support. This needs to be programmed. Thresholds to say how many holes to put in and where.
-The hinge holes are placed depending on the door's type, material and dimensions.

In the end, the code that governs something as simple and stupid as punching holes in a piece of wood takes up roughly five pages, printed. Among them, somewhere, is the code for the holes that were misplaced. And I'm never guaranteed that the previous programmer has commented his stuff, which means I'm going to spend some time just looking for where things are going wrong. And then I need to fix it without breaking anything else in the process, because if I want to move a hole 1/16 inch to the right in one instance combination of door type, measure section and material; not for every single piece we make.

Solving a bug like that? If I'm lucky and the code's short and simple, roughly 15 minutes to fix it, test it and confirm verification. For longer and more complex pieces, this can be half a day. Perhaps even a full day. For older code referring to things done in some outdated tacked-on manner backed when things weren't as mature? I can be breaking my head over that sort of bug for two or three days. Even though the end result and the problem in the first place looked pretty minimal.

We'll put this in perspective. If there's a faulty code that misplaces one component on your brand new CPU so much as one nanometer off, you're screwed. One nanometer just ruined a 200$ piece of hardware.

Now, let's move on.

Second job. I am working with about 30 or so programmers on an enterprise management software. We have several customers with each their own specifications and demands. The code weighs in at 2 gigabytes. Two gigabytes of nothing but text.

Right away, you can tell things are getting complex.

We have a module for the management software. We have a module for the product configurator. We have a module for the product bank. We have a module for the LAN and server installations. We have over 60 different modules and they must all work well. Have fun.

The average module spans about 150 code files of varying length, most of them about 10 pages long, and every module relies on external plugins that do not belong to us and who sometimes do not send us the data in a way that we like, and we must find a way around that. Most of the code I trace through is obfuscated: it's encrypted so that outsiders can't read it.


Oops! We found a bug!

I am about to tell you a real example of a bug I investigated and solved this week.

The symptom: we have a hierarchical table, a table that contains items and sub-items. The items can be expanded and collapsed to see the sub-items - think of Windows Explorer's tree view, and you get the idea. Now here's the problem: we expand one item, and then expand another. Suddenly, the sub-items of the first expanded item become the sub-items of the second. Worse, if the two lists of sub-items are of different size, the program crashes.

I make a quick run-through of the code and form two hypothesises: either the displaying engine chooses the wrong items to display, or the items that are being given out are not the right ones.

Investigation: 12 hours.

Twelve hours of going through the code line by line, checking each suspected variable and object (most of which have a sub-list of variables and other lists that quickly takes on astronomical proportions) and making sure that everything is in its right place. Several times, I hit a lead, only to find out it was a red herring.

Eventually, I find the cause: the items being given to the displaying engine are only the sub-items generated by the expansion of the last item we clicked on. Result: the items of the other expanded lists are not in the pool for the displaying engine to pick up.

Solving the problem: 3 hours.

Now that I have found the culprit, I need to work around the problem and create the solution. Each time we expand an item, the pool of sub-items is refreshed, and this is where things go wrong, because some items we want to keep are being flushed. Because the table's software is third-party, we only have access to the displaying functions: we want to show this, and the table does its thing. We lack a crucial information: it's impossible for us to know which items of the table are expanded.

Final solution: we store every sub-item in the pool, whether its parent items have been expanded or not. It's not a good solution. What if we have a list of a hundred items, each containing several dozen sub-items? We'll have memory management problems later on, but for now, this is the best we can muster. I have other bugs to solve, which are just as urgent, and the release is scheduled on Monday.

I have until Monday to get the highest amount of bugs sorted out and stable. We can't push it back. The customer has already been waiting on us. We fix what we can, and we do our release. That's final. The other bugs will be fixed in the next update.



Other examples of actual bugs solved at my workplace:

-Generalized errors in the displaying engine. For two months, the person assigned to this task of "stabilizing" the render has taken an average of 4 days to investigate each bug, each of which has been solved with just one or two characters. Each time he corrects a problem, he must re-test the render to make sure this modification has not broken something else elsewhere. He has been correcting and stabilizing the same code sheet, a monster 10,000 lines long, for two months.

-A rendering error causes arc-circles to face the wrong direction. We have not found the cause of this problem yet.

-For a specific line of products, attempting to import them into a quotation from another quotation causes rendering errors. The culprit turned out to be the way the importation is handled within a very precise combination of factors.

-The program wrongly announces that an upload has completed even if the master server is down. It turned out that the code that manages the upload was naive instead of paranoid: If it found nothing wrong, it reported a success - when it should have been coded in such a way that if it didn't get a positive response from the server, it should've announced a failure.

Are we incompetent? Far from that. We have a centralized bug database, a history of modifications, and backups of all our code. I go through code all day, and I can judge that the people who work here are competent, knowledgeable and capable. However, the average program is so complex that it's impossible to escape oversights. As the program grows, errors accumulate themselves and generate bugs that are sometimes extremely hard to understand. Not only this, but we are also at the mercy of programming errors in the third-party software we use and incorporate into our own program. In the end, the behavior of one single button can be the fruit of thousands upon thousands of lines of code. It seems simple to the user, but a whole lot of work has gone into it. Making just one function, one button that does something, can cost the customer upwards of 1000$.

So if you are tempted to rant about the developers of a game being incompetent for introducing "obvious" glitches and other "easy" mistakes, think about this:

-A professional-level program can contain hundreds of thousands, sometimes millions of lines of code.
-A single mouse click in a game can be driven by and generate an effect managed by tens of thousands of lines of code. Gordon Freeman firing one round from his pistol and killing a Metrocop takes into account a dizzying array of factors. If the Metrocop is not hurt by the bullet, and we are sure that Gordon fired accurately, then we have that much code to wade through to find the cause of the malfunction.
-Bugs are given priority levels. Some mildly annoying and very visible bugs are low-prioritized in favor of unseen bugs that compromise the security and stability of the program.
-Very often, solutions tested and marked as correct in a development environment turn out to be inadequate in the actual end-user client environment.

If, at any point, you feel that you can do better than "those no-good devs who obviously don't care about us", then I invite you to learn programming and get hired. If you don't like to see bugs, come here with us and work to solve them. Programmers don't have a foosball table or a miniature basketball net in their office. Stop thinking in dotcom bubble terms. Programmers program. They spend their days investigating bugs and solving them. They spend their days developing new modules and testing them in every possible way they can think of. Programmers must be patient, tenacious, organized and creative.

We are not boring either. We, like all workers, take an occasional break and shoot the puck. We play a quick LAN party at lunch to ease the pressure. We go out to have a drink and play some pool when we can afford the time to. Most of us work beyond the usual 40 hours a week. We help each other. We help on each other's projects because we know that casting a different pair of eyes on an old problem can give birth to a new solution.

If you think programmers are incompetent, then sit down and make a program. Make it an endless project. Perform in survival mode. Start your first module, and expand, every day, without fail. Consider it a mini-job. Dedicate an hour of each business day to advancing your program. Once you're done making a module, create another on the same theme. Keep going and going. Do not miss a day unless the circumstances are outside of your control (sickness, death in the family, family outing, etc.) Do not take a day off because "you don't feel like it". If you do, stop your project and assess how far you've gone, how long you lasted, and the overall quality of the program you have made.

In most cases, you will stop after a few days, with an incomplete and very buggy program, which will sit on your hard drive untouched for weeks before, finally, being deleted.

In rare cases, you will stop after a few weeks, with a working program that contains some unfinished modules, but the essence is there.

In extremely rare cases, you will end up with a program that keeps on expanding and gaining features, as you dilligently work on it with regularity and consistency, for several months, perhaps even years in a row (http://www.bay12games.com/dwarves/dev.html).

And even this game I mentioned a paragraph up has a large amount of things that could be fixed. The maker of this game has graciously listed them all for us to see, to know what's going on with his project.

Do you think programming is easy?

All right then.

Get out there and program.

SStrikerR
Aug 28, 2008, 07:29 PM
It's good that you got your rant out, but I hope nobody but me read that...

TheOneHero
Aug 28, 2008, 07:32 PM
I read it too.

You're a good man Shuri.

Shadowpawn
Aug 28, 2008, 08:00 PM
-A rendering error causes arc-circles to face the wrong direction. We have not found the cause of this problem yet.


I was thinking about this problem you mentioned. I'm just a hobbyist still in school for programing but, to me, this sounds like a mathematical error in program. If it's facing the wrong way, like in 180 degree fashion, couldn't you just flip the expression rendering the arc?

Kent
Aug 28, 2008, 10:57 PM
While it is true that programming on any level even close to some vague resemblance of anything even midly-related to professionalism isn't exactly "easy"... Consumers will be consumers, and consumers will complain when their purchased product is anything less than perfect.

Even if said consumer isn't exactly intelligent enough to realize exactly how much effort was put into said product.

CelestialBlade
Aug 29, 2008, 12:28 AM
Thank you for this. There's a good reason I don't do programming anymore.

amtalx
Aug 29, 2008, 06:39 AM
Damn. A+

I make my living as a software analyst and that's pretty much all true. In fact, my company has about 10 days to push out an extraordinarily complex encrypted security management system. FUN.

Sekani
Aug 29, 2008, 10:46 AM
In my limited programming experience I've discovered that there is nothing more frustrating than having to error-check code that you haven't written yourself. In one case it was such a mess that I found it quicker to rewrite the entire program from scratch.

KodiaX987
Aug 29, 2008, 11:17 AM
I was thinking about this problem you mentioned. I'm just a hobbyist still in school for programing but, to me, this sounds like a mathematical error in program. If it's facing the wrong way, like in 180 degree fashion, couldn't you just flip the expression rendering the arc?

I'll pick up this example because it shows the perception of the customer versus what has actually been coded.

What the customer believes: "The arc-circle is the wrong way, so it needs to be flipped around."

In reality:


The rendering method is abstracted to such a degree that the code used to display components is able to draw pretty much any shape or form.
This code is being fed a set of points that has been generated elsewhere - in a code sheet that is able to create any sort of arc of circle in any direction, configuration, length, wide or shallow etc.
Furthermore, this code only shits up when being given a particular arc of circle configuration to draw.
We can't do a flip around because this would break the other (working) arcs of circle. Forthermore, the code can't "recognize" what sort of arc circle it's working on, so we can't trap this particular instance.
So in the end, an operation that happens within the pointset generator, and on a given and very particular configuration, it somehow flips something around.
Thus, rather than catch the exception, we need to strengthen the code to have it somehow operate smoothly even with this "exceptional" arc of circle we have.


This is just a very concise and vulgarized list of how things work inside the displaying engine. The actual root of the problem can involve even more factors than this.

RufuSwho
Aug 29, 2008, 11:40 AM
Nice thread.

I do MEP engineering, not nearly half as complex as what you are describing here. thus, half of what you said is WAY over my head

Hopefully just reading this will give some posters pause before they complain about how easy it SHOULD be to fix game problems.

Goodluck on your project.

amtalx
Aug 29, 2008, 11:44 AM
One thing to be said though: the difficulty of programming has nothing to do with ST being lazy. :D

McLaughlin
Aug 29, 2008, 08:14 PM
That was an interesting read. Now I know what I have to look forward to.

Though, I feel compelled to agree with amtalx as well. There are problems at SEGA far bigger than robot slowdown.

KodiaX987
Aug 29, 2008, 11:12 PM
Though, I feel compelled to agree with amtalx as well. There are problems at SEGA far bigger than robot slowdown.

I'll go so far as to say that Sega's delays might be more money-driven than anything else.

To make a long story short: if the update will bring in more members and money than it will cost, it will be done. Otherwise, it will not. There is no inspiration or care or artistic interpretation whatsoever behind patches and new content. The only reason new content is developed is because it will generate a profit.

A dev from Sumo Digital once spoke on the GameFAQs forums. He told us that they couldn't do a patch unless Sega told them to do so. Until then, the devs were assigned to other projects with a higher profit value.

The situation is similar where I work: resources are managed and assigned. For a while, ten people will work on a project. Then after some time, it'll be just one or two people to hammer out the rest of the bugs. Sometimes, a project will be stopped because we are at work on another, more urgent project that guarantees a higher profit. In most cases, we don't have enough people to finish everything, and it wouldn't be a good idea to have things that way. A programmer must always remain busy with something. Otherwise, it's a waste of a salary because you've got an employee being paid to sit at his desk and play Solitaire.

The average developer will not go out of his way to "please the crowd". Sure, if he intercepts a bug he knows the answer to right away, he'll solve it in a few minutes and move on. He'll correct obvious and easy errors whenever he finds them, because it doesn't hurt to do that. But, a dev will not do overtime for the people. He'll do it for the money, to catch up on work he's behind, and for extra vacation days. That's it, that's all. A dev has too much work on his platter to worry about "making the customer happy". His objective is to hammer out bugs.

We'll make an example. Right now, I have 11 bugs assigned to me. The latest one, which I reported myself, is numbered 3850. Three thousand, eight hundred and fifty bugs so far since the bug management database has been installed. Most of them have been fixed already. Some are in progress. Some, we couldn't reproduce. Others, we acknowledge as bugs, but they will never be fixed.

Anyway, moving on...

So far, I have worked on five projects, which I'll call by fictitious names: Bravo, Temple, Sunshine, Novella and Windhill. The following story spans four months.

I was first assigned to hammer out some easy bugs on Bravo while I got used to the interface and the way the company and the code worked. For most of my internship, I've worked on solving bugs for Bravo, which was deemed as "affordable" to teach me the ropes. Halfway through my internship, I was told to use whatever free time I had to work on Temple.

Eventually, I completed the majority of Temple, and went back full-on on Bravo. Soon, I was called to help on Sunshine, which was in trouble, and they needed an extra programmer to hammer out the bugs before the release of the next update.

While working on Sunshine, I noticed a good friend of mine was quickly becoming overwhelmed by the slew of bugs he had to solve on Novella. Looking at the list, I found that he had over eighty bugs, he was behind schedule, and the client wasn't happy with our progress so far and was threatening to scrap the project. This wasn't an interesting outlook for us. I proposed my help on Novella, and did some overtime to clear out a few bugs. Eventually, I was drawn part-time into the project. I was to work on Novella bugs whenever I hit a dead period while doing Sunshine. Whenever my friend stayed late, I stayed with him and made use of his expertise to find my way around Novella a little better.

Now, Sunshine is nearing its end. The client wants an update, and now. We're out of time to fix the bugs we find most crucial. The new objective is to stabilize the build as soon as possible. I've been working overtime to try to get this done this week, but it's still not up to par. I will be working further on the weekend at home, and the boss and I will be phoning each other to possibly schedule a meeting at the office so that we can finish up the job on Labor Day.

Work on Labor Day? Yep. We're in shit, here. We need to get that work done fast, because once that new week begins, the update gets sent and I become officially assigned to Windhill.

Windhill is a monster project on which I'll be the only person to work, and the thing has been in demand for a year now. I have until Christmas to complete it.

So now, the rundown:

-Bravo has been worked on enough to keep the customer happy. The remainder of the bugs are minor annoyances that the client is willing to cope with.
-Temple was made to speed up development on our end of things, and will be of good help each time we make new software.
-Sunshine is in rush mode. We need to get the major bugs fixed, because right now, it's not looking pretty and we can't seriously release something that's broken in this manner. It's doable, but it'll require hard work.
-Novella has made good progress, and we are working on bugs that are flagrant, but harmless; mostly display errors that do not affect important things like finances and security. The client, however, is very picky on the bugs, but is also one of our biggest customers.
-Windhill is scheduled to be a powerful, beautiful and useful module, which will be deployed and offered to all our clients.

This sounds beautiful. Now, the real thing:

-Bravo has satisfied our customer enough that he'll keep paying us for further updates.
-Temple will allow us to develop products just as powerful, but at a fraction of our previous costs.
-Sunshine must be done well, or else the client will doubt our professionalism and become more cautious about the money he spends. Most of the requests he's sent out so far have been for new features, which are being worked on in R&D, and which pay us top dollar.
-Novella must absolutely be done well, or else we risk losing a client we want to hang on to.
-Windhill's purpose is to amaze the crowd and answer a very glaring opportunity in the market for something that's never been done before as well as we're about to.

Even more:

-Sustain profits.
-Do less expenses.
-Maintain profits.
-Rescue profits.
-Generate profits.

This, by the way, is without taking into account possible intra-company relationships and problems: office rivalry, asshole coworkers, location problems, financial problems, etc.

Thankfully, we experience very few of these issues: the atmosphere is good, the workplace is in a well-maintained building with plenty of space, the employees are dynamic and friendly, and our stash of money allows us to remain on top of things, by baying enough employees to do enough work.

In other companies, this may not be the case:

Lack of funds can stop a project dead in its tracks, with no ability to gamble time away in the hope of reaching a profit.

A bad workplace can generate a hateful environment and sap employee morale.

And at last, circumstances can force management to let go of a project in order to secure themselves on another, even if this means taking a dip in reputation and losing customers and potential customers.

The programmer, in all this? He makes features and solves bugs.

Once he gets home, after eight hours at the keyboard, he wants a change of pace. He wants to have a good meal, play a game, or go outside and do something else.

In very rare occasions will someone step up and "offer a gift" to the customer.

And to be frank, the customer rarely deserves a gift. Especially in the gaming community, where the average outcome of any well-made and well-diversified game ends up in everyone playing the same map with the same characters. Most expansions are frowned upon and told to break more things than they fix. Additional quests and maps are told that they suck. Devs are accused of "not caring" and of "laughing at the face of everyone".

For the record, the dev does what he's been told to. He does not laugh, nor does he feel complete apathy. It's in his interest to code well and dish out programs that are of good quality. No quality, no job. Depending on which sort of thing he's working on, he'll go completely unnoticed by the customer, or he'll be outright hated to the core.

ShikiMSHTS
Sep 7, 2008, 01:18 AM
This is why I almost never complain about ST. Even if they may deserve it, I like to believe most of this, and while I disagree with the "doing everything for the profitability", what can you do in a market like today's? It's insanely risky to do anything that wouldn't churn out a decent profit.

Kent
Sep 7, 2008, 02:40 AM
This is why I almost never complain about ST. Even if they may deserve it, I like to believe most of this, and while I disagree with the "doing everything for the profitability", what can you do in a market like today's? It's insanely risky to do anything that wouldn't churn out a decent profit.
Thus is the state of the games industry. Unless unique things along the lines of Braid and TWEWY and whatnot start becoming financially feasible among companies, we're just going to see the same old homogenized crap, game after game.

People are more likely to buy something in a series than they are to buy something that's new, unique, or in a genre of its own... Because they know what they're getting.

The simplest answer to solving this issue is to provide more demos for more games, so people will be able to pick out a gem by playing it first, as opposed to risking a $60 purchase on it... But that may or may not be feasible for most companies, which is why it hasn't happened. Making a demo will probably delay progress on the game by a small amount.

Thus is the problem with "games as business" vs. "games as art."

Broodstar1337
Sep 7, 2008, 04:23 AM
Skimmed through the OP and all I got from it was an elongated "HURR I DON'T SEE YOU DOING MY JOB ANY BETTER SO STOP CRITICIZING PROGRAMMERS".

Listen, sweet cheeks. You're not the only guy working an honest job for an honest dollar, and while I know first hand how hard programming can really be from being ass at High School Visual Basic, I also know you don't have the hardest job out there. Airplanes crash here and there but I'm not about to challenge someone to fix aircraft better than I can before they can say that mechanics are pieces of shit.

People will be people. They want things they can find a use for and expect them to be reliable. Good for you that you're making things more reliable for the average joe when it comes to whatever the fuck you're even programming in the first place. But your timetables are fucking you over more than anything else. Sometimes you can't get the job done under such time constraints and you have to send out an unfinished product to the public, where they in turn purchase the product and are dissatisfied because it's incomplete, unfunctional, what have you.

You can be all butthurt that people don't appreciate your hard work all you want, people will still have expectations for products. Imagine if you went to McDonalds and ordered a Big Mac meal and they have a new policy stating orders must reach the customer in 30 seconds or they're fired. 30 seconds passes and all they can give you is a couple beef patties on a half a bun coupled with a half a bag of fries and a cup full of ice. You're gonna be pissed, aren't you? Now imagine the cooks coming on PSO-World writing a ten page rant in Dead Horse Society because you didn't appreciate their honest efforts. Because that's exactly what you sound like.

KodiaX987
Sep 7, 2008, 08:27 AM
Skimmed through the OP

Skimmed through your post.

Want me to read you? Then read me.

Broodstar1337
Sep 7, 2008, 05:50 PM
Skimmed through your post.

Want me to read you? Then read me.
No.

I'm in Iraq. In between doing my job and whatever assorted tasks I've been assigned, I just don't have the time to read long and drawn out diatribes about how no one appreciates your hard work. There are unsung heroes in the world. Tough shit, though...

KodiaX987
Sep 7, 2008, 09:12 PM
No.

I'm in Iraq. In between doing my job and whatever assorted tasks I've been assigned, I just don't have the time to read long and drawn out diatribes about how no one appreciates your hard work. There are unsung heroes in the world. Tough shit, though...

Then I will calmly wait for you to return from your tour of duty, after which, should you be inclined to read the full post, I will be more than willing to hear your thrilling stories of dangers and adventures in the land where all is not peaceful.

See you when I see you.

furrypaws
Sep 8, 2008, 05:41 PM
Eh...not so sure I want to try programming anymore. You kinda make it sound like it's the most tedious job ever, right down there with number crunching.

So, is what you're saying that Sega simply can't make a better game because of lack of money on their end? That's not good. Lack of money on their end means less content, which means less customers, which means more of a lack of money, which means even less content, which means even less customers, and so on and so forth.

Did I get the gist of your post correct?

McLaughlin
Sep 8, 2008, 05:49 PM
That's not the only reason. >_>

KodiaX987
Sep 8, 2008, 09:26 PM
The tediousness of the job heavily depends on the content you're developing. If you're in a company that's already released a program and there are not really any new developments expected aside from the odd patch, then yes, you're looking at pure rock-hardcore debugging - for a first-timer, that's killer.

Most likely, you end up in a job with a mix of the two: a bit of new and a bit of old. You spend a while inspecting and fixing bugs, and another while developing new content. There's a whole lot of factors that change whether you'd like one or the other in particular - some debugging sessions involve numerous quick and easy bugs while others are more challenging; likewise some developments are straightforward while others are very complex. One thing that you do at the job that you don't in homework is really, really, really make the damn thing fool-proof. The stuff you can't make so, you warn the user and tell them how to work around it 'till next patch. Some concessions, I know, have been made that way. There are a few flaws in our program that one wouldn't fall upon should he have an ounce of common sense - but the bug is there nonetheless. The fix is just too difficult and not important enough for it to be done right away.

One thing I want to show is what an average day at work is. There are a number of circumstances end users don't think about, which makes development take the speed it's having now. Also, on average, actual work times are grossly over the expected work time. A particular bug deemed solvable in eight hours ended up taking sixty-five. Don't worry; that sort of situation is common and the expected times are almost nothing but suggestions. Likewise, a piece of code I'm working on this week that's expected to take 8 hours will most likely take upwards of 20: I found out I can't do what I need to do the easy way, and will have to build a workaround to make things fit, which will make testing the whole apparatus an interesting procedure!

Money is always a concern. If something takes too much time, the higher ups voice their concerns. The longer things take, the less stuff they can sell to end users - and this time is taken up by us getting paid. True, there are some things that just can't be avoided. But the fact remains that money isn't infinite and the shop can only afford so many programmers. With infinite money, you can hire as many as you want and any bug that comes up will have someone working on it right away - but this will not happen in real life. :)

The best way to figure out if you're good to go in the programming world is to find a programmer's job ASAP. If you have a free summer, then by all means, go for it and apply to some places and get the real work done. It's doable even if your schooling isn't finished. In fact, it's preferrable to do while your schooling's still going on, since if you don't like it, you can bail out and choose another thing to major into, rather than say "I wasted cash on a diploma for a job I won't like." Take note, however, that programming isn't all the IT business. There are also good jobs in database administration, networking, etc. Look these up as well.