The punches are pulled in this piece. Not only is the compiler continuously complaining, once you ship code, your customers call in to complain about every conceivable bug and a great deal that weren't conceivable. You can have thousands of happy customers, but you as the developer will hear from the three guys with obscure configurations and bizarre setups encountering bugs. Shipping software is ten seconds of "Hooray", followed immediate by a breakdown of what terrible things are already wrong with the next release.
I'm surprised any of us can hold up under the withering torrent of negativity that is any serious programming job.
I actually don't mean this as a complaint, either. I've adjusted. I've been doing this for 15 years. But I've been sort of stepping back lately and looking at my job from other points of view, especially as I deal with coworkers who aren't so adjusted/adapted, and not only do I now understand where they are coming from, I find myself wondering how adaptation is even possible. It's absurd how negative the interactions are. Keep track someday of your professional interactions and look at how many of them are negative; bug reports, missed deadlines, "we can't do that", etc. Or perhaps, don't, if you've never thought about this before. I sure hope you have an otherwise positive workplace.
But this is true of any "producing" profession. Any time you're creating something and "putting it out there", there's going to be a huge stream of criticism from every direction. Artists, writers, musicians, engineers, carpenters, etc.--all of their work is constantly under scrutiny by "the customer" and/or "the boss".
Even non-producing professions have to deal with constant scrutiny of their performance and negativity. Salespeople might make one sale out of 20 attempts. Anyone in a medical profession is under extreme pressure to not make a mistake (and sometimes things go wrong even when you do everything right).
There are very few professions who don't have to deal with the whole "focusing on the negative" thing (I can't actually think of any). It's pretty much a fact of life that if you want quality, you have to systematically eliminate your weak spots.
This is one reason I'd much rather be discovery-oriented than goal-oriented.
If you look at all of these as just part of achieving your goal, then all of these are negatives. The compiler prevents you from achieving things, your bug reports remind you how you haven't achieved them, every missed deadline makes you wonder if you'll ever achieve them, and your customers don't appreciate it when you do achieve them.
But if you look at all of this as a process of discovering what customers want and how to accomplish that, all of those negatives become positives. Your compiler error tells you early about something that would've become a problem later on. Your bug report reminds you of a case you haven't handled, some subtlety of the problem that you're just now learning about. Your missed deadlines mean that you didn't know enough about the project to estimate accurately before, so now you have more information about its true scope. And your unhappy customers will tell you ways in which you can improve.
I reckon it depends on the size of the company you work for too. Obviously there will be always some errors and problems but there is also quite a lot of thinking and creative work to be done. Especially if the team is not massive and you take part in decision making process. Not exactly the "turn this coffee into code" type of job.
My friend working in a oil industry/software company (quite big) told me once - here you only get noticed when you manage to screw up something.
> I find myself wondering how adaptation is even possible.
I've been doing this job for 7 years now, and I've wondering along these lines a lot more lately, because I honestly do like what I'm doing and I plan do it for another 7-10-20 years. My current best answer is "don't take anything personal".
Yes, the latest bug will always be something that would risk taking us all one step closer to Armageddon, or so the clients/non-IT-colleagues would like to make us programmers think, but whenever I'm put into this position ("the world is crushing! do something!") I try to chill it down before taking action.
Also, there are always, always harder things in life than being a programmer, I try to remind me of this whenever I can. Just this summer I went out to help my grandma' pick up plumes during a weekend. A peasant, she's in her mid 80s now, she hasn't had a day of "vacation" or "paid holiday" since she married grandpa', 60+ years ago. One of her biggest regrets that she's experiencing right now is that she hasn't the physical strength anymore to work as much as she did for each day of her adult life.
Try working in support for a while. Customers only call when something isn't working the way they expect, and since documentation is usually and afterthought among development teams, figuring out what is really possible with the software is often difficult. When you do identify bugs, you often have to go back to the customer to tell them it's not going to be fixed - and take the abuse that comes with those messages. Let's not even talk about non-technical salespeople who may not really know what the product is capable of and either tell customers wrong things or outright lie about what the product can do to make a sale. At which point, once again, the problems end up in the laps of support engineers.
I get what he's saying, but I think he answered it himself, when he questioned if he was being overly dramatic. He is being really over-dramatic.
I would love to hear about any occupation where the negatives aren't run into in a similar way that he describes programming.
That being said, the one thing that I dislike about programmers in general is that I think we believe we sound smarter if we figure out ways how an idea won't work. It's annoying when you come up with a new idea, and all you hear is a litany of reasons why it won't work.
The most important lesson I learned was soon after I had moved to the Valley, and I gave a suggestion to one of the senior engineers. Instead of shooting it down immediately like others loved doing, he simply said something like "Okay, I'm not sold on it but give it a shot." I had been prepared for a lengthy argument over why my idea was good, and I was taken aback at his immediate open-mindedness. It's something I've taken to heart since then.
The mindset between engineers looking at new ideas and resolving old ones are different. A good engineer with foresight can see when an idea or proposal is good but at the same time he's thinking of the challenges it poses. I know I do this daily and the linked post is actually pretty hard hitting for me.
When I was looking for new work everywhere I applied I looked at how beneficial it was for me but that was always balanced with questions about how it will shape my career and if it will take me to a place I want to see myself in 5 years or will it put me 5 years behind my ultimate career goals? No matter what company or person I talked to I managed to find the reasons why it might not be beneficial to me.
I spoke with my girlfriend a lot during this search. At one point she got fed up with me and said to "shut up and stop being so negative". It sort of offended me because in a sense I didn't feel that I was being negative but rather "just looking at it from all angles". The coder mindset reaches into our daily lives where we start weighing the pros and cons of every decision to figure if it is worth the effort instead of just enjoying things.
Of course, I may not be typical. I live in an area with very few hackers and engineers so its hard to compare myself outside of these forums.
I like this point. In one company I was told a couple of times that things I suggested couldn't be done. I got a raise by going off and making a proof of concept that it could be done.
With that said, identifying challenges that need to be overcome ahead of time can be a useful step in planning as long as its not always seen as a reason to do a full stop on thinking about the concept.
I'm not sure that specifying how things won't work is done to appear superior rather than giving feedback. There probably isn't enough time in a day to try everything and if you can save some time by pointing out why something won't work off the bat it's probably a good thing.
As with everything though, it kind of comes down to how you communicate that something won't work.
There is nothing intrinsically negative about anything said here, just neutral things viewed in an extremely negative lens. Here's the exact same set of steps making up the "normal workflow", but framed as a positive feedback loop:
1. write some code
2. run the code
3. get further than you did before (perhaps with a new error message)
4. decide what's next and go back to step 1
I don't think negativity is intrinsic to the profession. I get to build things every day. I get to fix problems. That's an incredibly satisfying and positive thing.
That reminds me of an old story about how different people can look at the same job in different ways:
A man came across three masons who were working at chipping chunks of granite from large blocks. The first seemed unhappy at his job, chipping away and frequently looking at his watch. When the man asked what it was that he was doing, the first mason responded, rather curtly, "I’m hammering this stupid rock, and I can't wait 'til 5 when I can go home."
A second mason, seemingly more interested in his work, was hammering diligently and when asked what it was that he was doing, answered, "Well, I'm molding this block of rock so that it can be used with others to construct a wall. It's not bad work, but I'll sure be glad when it's done."
A third mason was hammering at his block fervently, taking time to stand back and admire his work. He chipped off small pieces until he was satisfied that it was the best he could do. When he was questioned about his work he stopped, gazed skyward and proudly proclaimed, "I'm building a cathedral!"
This brings up an interesting concept. All great creators (artists, programmers, woodworkers, hairdressers, etc) tend to be more pessimistic than optimistic. If you attitude is "Wow this program I wrote is totally awesome, I deserve a pat on the back", then you'll never improve upon your program and you'll end up never improving your skills and will end up a rosh katan[1]. You have to be the kind of person who sees each of your creation in a constant state of less than perfect in order for you to act upon making it better.
Interestingly enough, people on the other end of the spectrum (sales people, executives, marketing people, etc) have to be the opposite. You can't have any doubts about the awesomeness of the product. Doing so would be counterproductive.
Among all the non-programmers I've talked to about work, I've never found one who doesn't have to deal with some sort of constant, repetitive negative feedback. Teachers have to deal with some kids that simply won't stop acting out, and who continually perform poorly on assignments (not to mention parents happy to tell them everything that the teacher is doing wrong). The salespeople have countless deals they fail to close. The manager has to make painful decisions about other peoples' livelihoods, and absorb the criticisms coming down from higher up the chain. The artist has to deal with everyone being a critic, and doesn't have the luxury of dealing with things that either work or don't work, it's all subjective. The doctor can't cure everyone. The lawyer can't get justice for everybody. The data-entry clerk peon has to ignore that they're completely replaceable and that they'll probably be replaced by a computer sooner or later. Anyone building anything (not just software) has to deal with the reality that 95% of the time, it's not done yet, and you still have more work to do and things to fix.
That's not to say that some people aren't going to be happier in certain fields than others, or that some subsets of the field fit some mindsets better than others, but software is pretty good work. The article acknowledges this right up front, and then ignores that to dwell on the negatives. It blew my mind a little to see such a negative perspective. If I fix a simple bug in my code, it doesn't bother me much, because I know I sometimes make mistakes. If I find and fix a really interesting subtle thing, then it means I learned something new, and that the product is now in better shape than it was yesterday. If there's a usability issue, it's an opportunity to figure out a new way to do it. And all the while I have the constant positive feedback of knowing that this thing that I built is doing something, I can directly watch it do that thing, and that it's being used by people to get stuff done.
Unless you build everything exactly right the first time, and never have to deal with external changes that mean the software needs to change, you're never going to be free of negative feedback. So you should start looking at why you're letting the negative parts drive your attitude.
EDIT: My own personal idiosyncrasy is that I get very suspicious, maybe even paranoid, about a complex task if everything seems to work right the first time and I don't have a few cycles of negative feedback. I know it's complex, and so I don't expect perfection out of the gate, so a few runs through the "fix one thing, find another issue" washer are oddly reassuring to me. Even though rationally I know that fixing things I knew to test for doesn't mean it's any less likely that there are errors in the things I haven't thought to test.
I agree. I thought about going into academia for a while, and started on a Ph.D programme, but then realised that a large chunk of my life would be spent explaining the basics of the subject over and over again to people who may not necessarily be as passionate or excited about it as they could be.
I sort of realised eventually that given how expensive going to university is now (9x more expensive than when I went), I'm not necessarily going to be teaching the brightest and best. Instead, I'll be teaching the brightest and the best who also have the willingness to get massively in debt and/or who have rich parents willing to pay for it all. Suddenly, the important moral purpose disappears, and you are left with: well, I could get paid the same amount in about five years time as I get paid now to write code. Why do I want to do this?
And I kind of like software as an industry. It's not perfect: there's douchebags and posers and so on. But it's reasonably recession-proof, it's not on a doomed-path-to-hell like lots of industries, it often lets me work on quite interesting problems (often having some satisfaction doing it), most of the people are pretty nice, the bureaucracy is minimal (for me anyway) and the pay is decent. The main downsides: RSI and those nagging calls from my parents about how Google Fireface isn't talking to their printer. The latter is a trivial problem and the former is mostly fixable by posture adjustment and exercise.
Maybe it's just me but I've always seen these things as positive feedback loops. I write a failing test so that I have a guide as to what to do next. I fix a bug so that my app does a better job for my user. I'm not sure where his negative attitude comes from, maybe he likes to believe he can write perfect software and takes it at as a personal failure when he gets a bug report? Personally I find coding therapeutic, at the end of every day I know that the product I'm working is a little bit better than it was yesterday.
I agree with you. I feel like this article is pretty melodramatic. I've been a (professional) programmer for the better part of 10 years and I've had my share of ups and downs, but this job is definitely a very, very good one. The sheer amount of freedom we get from a) the good pay and b) the fact that programmers are so in-demand right now that companies bend over backward for us really can't be matched in many other jobs.
The lamenting in this article is from somebody with very little perspective on what most people have to do just to survive.
I have to agree with you. In so many careers your performance is subjective. The cool thing about programming, to me, is that when there's something wrong, it's objectively wrong, meaning it can be fixed. Sure you might be able to 'fix' things more quickly or less quickly than someone else, or implement a solution better or worse. But the product you create pretty much either works or doesn't work.
Perhaps it's a matter of expectations. No one expects a salesman/woman to close 100% deals or even 50%,a manager's job is pretty well known, and the stress associated with it is taken care of from the start. Lawyers get paid whether they get justice or not most of the time, data-entry clerks have jobs that end at the end of the day, and they won't be thinking about a product they coded that might have some critical flow and come back to bite them months after the release.
If I remember well teachers and medical staff have depression and other work related mental issues rates on par with programmers, so you would be right about the negativity they also face everyday.
Of course it's not the end of the world, it's just something that is not brought on the table so often I think.
I think part of the reason the article is negative is that in much of the industry it's not you building anything, but it's you fixing some garbage that was hacked on by an army of a thousand morons before you into something that isn't really fixable into what management wants.
All the while dealing with people around you who do not understand what you do, whatsoever. This last part is crucial and it is everywhere. I have yet to meet someone who is not an engineer or ex-engineer who actually understands what I do and what I have to deal with not only with my own code (which is far from perfect) let alone code written by some overseas contractor who just got his copy of Java for Dummies so he can learn PHP.
It's times like these I'm thankful for a life lesson I was taught about 4 years ago.
I'm not a professional coder, but I do a significant amount of hacking and coding for one of my research fields (Computational Economics). I noticed this cycle too--this cycle of focusing on the negatives. It really did bring me down.
I chatted with my adviser, who was married for a number of years to a child psychologist. She recommended to him that every time he accomplishes something small, get up and walk around. Do something small to reward yourself. Then, get back to coding. This inserts a positive stimuli in an otherwise negative feedback loop. The more bugs you solve, the happier you are.
I've found this to be very helpful for me. Hope if helps some of y'all too.
My partner and I just had our first iOS game approved. We had to ship without a bunch of features we had planned for (e.g. non-English localizations) simply because we ran out of time. During the final stages of the project, we thought we'd like to do something like a web-comic, to share the human story behind the development of the game. Now that the game is approved and we're reviewing our notes and drawing the comic (it can be loaded dynamically into the game as a slideshow, and it will also go into our facebook page/company blog at http://noisytyping.com), our view has shifted from 'we could have done better' to being very pleased about the whole journey: how we started out, what challenges we faced (automating level-generation was one) and how we managed to stick to our plan and ship it. Without the postmortem, we'd probably never be motivated to make a game again.
I went to a tradeshow for my company a few weeks ago, where I got to just interact with potential customers all day. I had an absolute blast, by the end of the day where the other folks on the team were tired and ready to leave (I was the only developer), I was pumped and already thinking of how to come across even better to clients at the next day of the show. It made me realize how programming has adversely affected my demeanor and way I interact with people.
I realized that not so long ago, I was actually outgoing and cheerful most of the time, but programming has made me more surly and sometimes reactive in an insidious way. With programming you're always dealing with problems, and if you're not solving them in code, or being infuriated by something that you thought would take 30 mins but has blown your entire day, you're dealing with people problems.
"Why isn't this done?", "Why should we pay that much?", "When is it going to be done?", "How long do you think its going to take?", "Why is it going to take that long?", "Can you just squeeze this one thing into the iteration?", "That sounds easy", "Why is this broken?", "Who broke it", "Why can't you just code", "You ask too many questions" ... aaaaaack.
its just this steady barrage of crap you have to deal and you're usually the one saying "no", "we can't do that", "Why do you want to do that?" to where you just become this proxy for negativity even if you don't want to be, because ultimately you're going to be the guy cleaning up the shit when everything explodes because nobody thought to figure out how to do the whole thing properly.
Unless you're working at a real top notch engineering place, where half these questions don't come up or the top brass understand how the whole thing works, it can really mess with your attitude.
When I had that epiphany after the tradeshow, it really freaked me out to realize how professional programming was changing my attitude to people and life, so I don't think I'll be doing 100% development for much longer.
Hour by hour, day after day, I do this. Always searching for what's wrong with what I'm creating, rarely thinking about what's good about it. It's a negative reinforcement feedback loop.
"Dude, you're so lucky to be a master sculptor. Always hanging out with famous models and actors who want nothing more than to strip for you. Your works will be celebrated for more than two thousand years. I wish I could do that."
"Actually being a sculptor is making me pretty miserable."
"Woah, dude. What do you mean?"
"Hour by hour, day after day, I do this. Always searching for pieces of stone that don't belong, always trying to remove the elements that aren't part of my work, rather than being able to focus on the stone that remains. I can never truly build anything, only erode. It's a negative reinforcement feedback loop. I think I'll try watercolors next."
This guy has not discovered what it means to be a programmer, he is simply in a phase of his programming life. Chasing down bugs all the time? Why? I don't do this, and when I run across a bug it is usually a quick fix and not a big deal.
The goal is not to write it perfectly without bugs. The goal is to release it perfectly without bugs, and to do this all you have to do is test your code often as you make changes to it. (alt tab || cmd tab is your best friend)
Now, if you are running into bugs that take you 4+ hours to resolve, you simply have not been programming long enough. Over time these will be trivial issues for you.
What is amazing about being a programmer is the ability to create amazing things. Being a programmer is not awesome because writing conditionals and for loops are badass.
Instead of negatives, you're looking for positives. At the end you're rewarded with nicer code than you started with and green lights all the way down.
It's all about how you frame it - why would you frame the activity you spend most of your life doing negatively?
The question is not "What's wrong with this?" The proper question is "How can I make this better?" He's adopted a negative mindset by choice, whether he realizes it or not. That's not even what really grinds my gears about this post.
The really bad part of this post is the implication that this mentality (whether one takes the author's negative point of view, or my slightly more positive interpretation) is endemic to software development. It's not. Asking the question, "How can I make this better," ought to be a fundamental part of one's daily routine. Had the author adopted this mentality in general, he might have noticed a flaw in his workflow:
1. Write some code
2. Run the code
3. Get an error message
4. Find the error and back to step 1
There are some critical steps missing. A more appropriate approach would be:
0. Think about what I'm building
1. Write some code
2. Run (Test) the code
3. Get an error (of some sort)
3.5 Think about what might have gone wrong and verify it
4. Go to step zero.
That's right, when you find an error there are two distinct thought processes involved. First you think about what might have gone wrong. This would be the forming a hypothesis step of the scientific method (I've lumped testing into step 3.5 so as not to stray too far from the author's initial workflow, but suffice it to say that testing should be a recursive call to this entire process). Once you've discovered the source of the error, it's time to consider how best to fix it. Yes, more thinking. Only then should one go back to writing production code.
Sadly, I don't think the author's method is that rare. I had a professor who referred to the write/run/test/fix method as the original genetic programming. I think that's a fair statement. The problem with this method is that one ends up with a system that may work, but with no deep understanding of why it works. Absent that understanding, it will be more difficult to improve (fix) the system.
God help the next poor soul (aka the author in six months) to work on the system. Therein lies the negative feedback loop.
I think one way to help fix this negative feedback loop is to use the advice of the Harvard Business Review's article "How Customers Can Rally Your Troops" (src: http://hbr.org/2011/06/how-customers-can-rally-your-troops/a... ). The premise is that consistently showing your employees proof of the positive effects your organization's products produce for end-users can drastically improve motivation. I just linked to the abstract, but the full article goes into the dramatic effects this technique had on a university fundraising call center (a job with constant negative reinforcement).
After being a programmer for 20 years, I never thought of it that way. I think it is one of the better jobs out there, and I've always considered myself fortunate to be able to make a living that way. I will say, however, that spending the last 5 years working as at technology director at a school has been more rewarding, but it is not so much the kind of work I'm doing, but that I really value this school and the work they do. I feel privileged to be a part of it. In fact, the most difficult thing I dealt with in my programming career was not the work of programming, but working for companies where I did not always believe in the product.
Yea I got over that. Shit happens. Don't sweat the small stuff, yada yada yada. Besides when you fix it everyone lights up. It's the closest thing I've seen to a performer doing some amazing stunt with me being the amazing person. Focus on that, and not so much on that it broke. The difference between developers and non-devs is we can fix it, and that's really cool power. This article is almost like Wolverine complaining about his super powers being lame and always having to save the day. YOU'RE WOLVERINE STFU!
I think after being a programmer I have changed my outlook for the better because I realize what's possible instead of being trapped by other people's ideas/mistakes. I see how things are connected and if I changed this or that how it changes our limitations. Anyone can say "What if" very few can "Here's how." And that is really empowering and liberating.
I suppose when I was younger I was negative I wanted everything to be perfect like it couldn't be, but as I matured I see bugs, missing features, bad design as just opportunities and not the end of the world. Being late, bugs, complaining users, whatever it just doesn't bother me.
I'm not tuning them out just choosing to listen to what's really important and cutting through the bull because I expect all of it to happen. We're late ok I'll work a little more realizing I can really only make it about 10% faster, there bugs give me a reproducible test case and I'll fix it, users bitching reach out to them personally and find out what's the real problem.
And just like anything else in life, whether it's programming, football, music, or ditch digging, your attitude is your choice. The difference came when I chose to be positive...and laugh a lot more at all of the irony, bad choices we make, and gotchas that always creep up. Laughing really helps.
I have a very intelligent friend who try as he might cannot learn programming. He has interests all over the academic board and teaches two unrelated courses. I think I understand now why he cannot. He's an eternal optimist. I tell him he's selectively ADD about programming, but maybe he's just allergic to the negativity of it all.
I've been through this myself. I realised that the problem was me, and the projects that I was working on. I was fortunate enough to be able to step away, then go and find work that IS rewarding (for me it's playing with the front end, where people play with the app and go "ooooh!" and "aaaah!").
The key for me was to document the things that I hated about the job, and avoid them at all costs, but to acknowledge that criticism is something that feeds back into an application improvement process. ie. Don't take it as personal that someone is criticising you/your work. Find methods of improving the communication channel so that you don't spend days/weeks coding only to find "that's not what I wanted! that sucks!"
I'm fortunate to have an ex hacker/programmer as my manager who knows/understands/addresses my needs very well in my current role.
At some point I stopped chasing the higher paycheck, because I recognised that with a higher paycheck comes higher expectations, demands, hardships. Look at it from the employer's perspective - "We could hire 2 graduates at your cost, at that rate we expect you to not make mistakes, and to get twice the amount of work done."
A friend earns almost twice as much as me, with similar years of experience, but he is expected to miss lunch, stay back until midnight, answer calls to China/India on a friday night. No please/thankyou/you're doing a great job. Just "do it".
What we have done and what happens to us all accumulates inside ourselves and becomes the basis of our future consciousness and state of mind. Peoples' minds and consciousnesses are comprised of energy. If we use the example of a lightbulb, the consciousness is most akin to an electrical wave produced by the generator and the mind is most analogous to the light radiated by the bulb.
If we work in such a way that produces high entropy codebases, hides problems instead of illuminating them, or produce (or have to work with) highly inter-braided (complicated) architecture with no way or occasion in which to improve matters, then it's easier for people to be caught by grudge at their employer, clients, or circumstance. People can be influenced by these bad circumstances to abandon themselves, and in doing so, their resultant ignorant behavior will make their mind mind become dark. This is a most dangerous circumstance for a human being to live in, so the task of the modern programmer is to find out what they have worth living for, to find a good self, and to protect themselves from wrong relationships and from destroying themselves (through loss of simplicity in one's life) such that they can effect their benefit for themselves and the world. Without individual awakening then it doesn't matter what profession they hold, they still can't guide their life properly. So the most important teaching for programmers to save their way of life is that they have to understand properly what life is, how great a teaching it is for us, and just how precious is the opportunity that we have been given through our lives as human beings.
Being wrong is fantastic. You simply have to come to appreciate it. Every time you learn that you are wrong - and this applies for everything in life, not just with programming - you never have to be wrong in that way ever again. Not for the rest of your life, if you can remember, will you be wrong in that particular way. How amazing is that?
You're not 'focusing on the negatives', you're getting to be wrong, a fantastic opportunity. Most people don't get to be wrong. They persist in their wrongness and swim about in a sea of mediocrity with no sense of personal advancement. To get to be wrong on a regular basis is nothing short of exciting. Sure, others will misunderstand it. Managers and business types will not understand why you simply couldn't do everything flawlessly from the start and they'll try to give you a hard time about it. But it doesn't really matter. No matter how hard they push you, they can't make you think. No one can. It has to be undertaken entirely under your own will. And when you do so and come up with something wrong - you know you are actually guiding yourself to develop rather than stagnate.
Go on, be wrong! And then never be wrong in that way ever again!
[+] [-] jerf|13 years ago|reply
I'm surprised any of us can hold up under the withering torrent of negativity that is any serious programming job.
I actually don't mean this as a complaint, either. I've adjusted. I've been doing this for 15 years. But I've been sort of stepping back lately and looking at my job from other points of view, especially as I deal with coworkers who aren't so adjusted/adapted, and not only do I now understand where they are coming from, I find myself wondering how adaptation is even possible. It's absurd how negative the interactions are. Keep track someday of your professional interactions and look at how many of them are negative; bug reports, missed deadlines, "we can't do that", etc. Or perhaps, don't, if you've never thought about this before. I sure hope you have an otherwise positive workplace.
[+] [-] AerieC|13 years ago|reply
Even non-producing professions have to deal with constant scrutiny of their performance and negativity. Salespeople might make one sale out of 20 attempts. Anyone in a medical profession is under extreme pressure to not make a mistake (and sometimes things go wrong even when you do everything right).
There are very few professions who don't have to deal with the whole "focusing on the negative" thing (I can't actually think of any). It's pretty much a fact of life that if you want quality, you have to systematically eliminate your weak spots.
[+] [-] dsr_|13 years ago|reply
Do you know when your sysadmins are doing the job right? When you don't notice.
The only possible way for a sysadmin to get noticed is to screw up.
[+] [-] nostrademons|13 years ago|reply
If you look at all of these as just part of achieving your goal, then all of these are negatives. The compiler prevents you from achieving things, your bug reports remind you how you haven't achieved them, every missed deadline makes you wonder if you'll ever achieve them, and your customers don't appreciate it when you do achieve them.
But if you look at all of this as a process of discovering what customers want and how to accomplish that, all of those negatives become positives. Your compiler error tells you early about something that would've become a problem later on. Your bug report reminds you of a case you haven't handled, some subtlety of the problem that you're just now learning about. Your missed deadlines mean that you didn't know enough about the project to estimate accurately before, so now you have more information about its true scope. And your unhappy customers will tell you ways in which you can improve.
Same facts, wildly different interpretations.
[+] [-] pawelwentpawel|13 years ago|reply
My friend working in a oil industry/software company (quite big) told me once - here you only get noticed when you manage to screw up something.
[+] [-] paganel|13 years ago|reply
I've been doing this job for 7 years now, and I've wondering along these lines a lot more lately, because I honestly do like what I'm doing and I plan do it for another 7-10-20 years. My current best answer is "don't take anything personal".
Yes, the latest bug will always be something that would risk taking us all one step closer to Armageddon, or so the clients/non-IT-colleagues would like to make us programmers think, but whenever I'm put into this position ("the world is crushing! do something!") I try to chill it down before taking action.
Also, there are always, always harder things in life than being a programmer, I try to remind me of this whenever I can. Just this summer I went out to help my grandma' pick up plumes during a weekend. A peasant, she's in her mid 80s now, she hasn't had a day of "vacation" or "paid holiday" since she married grandpa', 60+ years ago. One of her biggest regrets that she's experiencing right now is that she hasn't the physical strength anymore to work as much as she did for each day of her adult life.
[+] [-] tomjen3|13 years ago|reply
But for me, it is a matter of not caring about the bugs but enjoying fixing them.
[+] [-] computerslol|13 years ago|reply
13 years in the industry here.
Your ability to relate to, and communicate with, people in the real world (in depth) will degrade over time.
[+] [-] tallanvor|13 years ago|reply
[+] [-] steve8918|13 years ago|reply
I would love to hear about any occupation where the negatives aren't run into in a similar way that he describes programming.
That being said, the one thing that I dislike about programmers in general is that I think we believe we sound smarter if we figure out ways how an idea won't work. It's annoying when you come up with a new idea, and all you hear is a litany of reasons why it won't work.
The most important lesson I learned was soon after I had moved to the Valley, and I gave a suggestion to one of the senior engineers. Instead of shooting it down immediately like others loved doing, he simply said something like "Okay, I'm not sold on it but give it a shot." I had been prepared for a lengthy argument over why my idea was good, and I was taken aback at his immediate open-mindedness. It's something I've taken to heart since then.
[+] [-] TheCapn|13 years ago|reply
When I was looking for new work everywhere I applied I looked at how beneficial it was for me but that was always balanced with questions about how it will shape my career and if it will take me to a place I want to see myself in 5 years or will it put me 5 years behind my ultimate career goals? No matter what company or person I talked to I managed to find the reasons why it might not be beneficial to me.
I spoke with my girlfriend a lot during this search. At one point she got fed up with me and said to "shut up and stop being so negative". It sort of offended me because in a sense I didn't feel that I was being negative but rather "just looking at it from all angles". The coder mindset reaches into our daily lives where we start weighing the pros and cons of every decision to figure if it is worth the effort instead of just enjoying things.
Of course, I may not be typical. I live in an area with very few hackers and engineers so its hard to compare myself outside of these forums.
[+] [-] timwiseman|13 years ago|reply
With that said, identifying challenges that need to be overcome ahead of time can be a useful step in planning as long as its not always seen as a reason to do a full stop on thinking about the concept.
[+] [-] axisK|13 years ago|reply
[+] [-] peeters|13 years ago|reply
[+] [-] greenyoda|13 years ago|reply
A man came across three masons who were working at chipping chunks of granite from large blocks. The first seemed unhappy at his job, chipping away and frequently looking at his watch. When the man asked what it was that he was doing, the first mason responded, rather curtly, "I’m hammering this stupid rock, and I can't wait 'til 5 when I can go home."
A second mason, seemingly more interested in his work, was hammering diligently and when asked what it was that he was doing, answered, "Well, I'm molding this block of rock so that it can be used with others to construct a wall. It's not bad work, but I'll sure be glad when it's done."
A third mason was hammering at his block fervently, taking time to stand back and admire his work. He chipped off small pieces until he was satisfied that it was the best he could do. When he was questioned about his work he stopped, gazed skyward and proudly proclaimed, "I'm building a cathedral!"
[+] [-] lmfao|13 years ago|reply
[+] [-] killnine|13 years ago|reply
[deleted]
[+] [-] freework|13 years ago|reply
Interestingly enough, people on the other end of the spectrum (sales people, executives, marketing people, etc) have to be the opposite. You can't have any doubts about the awesomeness of the product. Doing so would be counterproductive.
[1]http://www.danappleman.com/index.php?p=31
[+] [-] herval|13 years ago|reply
Optimists see bug reports as a way to improve things. Optimists bet on early tech because they see a bright future ahead (rails 0.9? ios 2.0?).
Being pessimistic will only feed your ulcer...
[+] [-] mkrecny|13 years ago|reply
[+] [-] majormajor|13 years ago|reply
That's not to say that some people aren't going to be happier in certain fields than others, or that some subsets of the field fit some mindsets better than others, but software is pretty good work. The article acknowledges this right up front, and then ignores that to dwell on the negatives. It blew my mind a little to see such a negative perspective. If I fix a simple bug in my code, it doesn't bother me much, because I know I sometimes make mistakes. If I find and fix a really interesting subtle thing, then it means I learned something new, and that the product is now in better shape than it was yesterday. If there's a usability issue, it's an opportunity to figure out a new way to do it. And all the while I have the constant positive feedback of knowing that this thing that I built is doing something, I can directly watch it do that thing, and that it's being used by people to get stuff done.
Unless you build everything exactly right the first time, and never have to deal with external changes that mean the software needs to change, you're never going to be free of negative feedback. So you should start looking at why you're letting the negative parts drive your attitude.
EDIT: My own personal idiosyncrasy is that I get very suspicious, maybe even paranoid, about a complex task if everything seems to work right the first time and I don't have a few cycles of negative feedback. I know it's complex, and so I don't expect perfection out of the gate, so a few runs through the "fix one thing, find another issue" washer are oddly reassuring to me. Even though rationally I know that fixing things I knew to test for doesn't mean it's any less likely that there are errors in the things I haven't thought to test.
[+] [-] tommorris|13 years ago|reply
I sort of realised eventually that given how expensive going to university is now (9x more expensive than when I went), I'm not necessarily going to be teaching the brightest and best. Instead, I'll be teaching the brightest and the best who also have the willingness to get massively in debt and/or who have rich parents willing to pay for it all. Suddenly, the important moral purpose disappears, and you are left with: well, I could get paid the same amount in about five years time as I get paid now to write code. Why do I want to do this?
And I kind of like software as an industry. It's not perfect: there's douchebags and posers and so on. But it's reasonably recession-proof, it's not on a doomed-path-to-hell like lots of industries, it often lets me work on quite interesting problems (often having some satisfaction doing it), most of the people are pretty nice, the bureaucracy is minimal (for me anyway) and the pay is decent. The main downsides: RSI and those nagging calls from my parents about how Google Fireface isn't talking to their printer. The latter is a trivial problem and the former is mostly fixable by posture adjustment and exercise.
Life is pretty good.
[+] [-] ollysb|13 years ago|reply
[+] [-] jgh|13 years ago|reply
The lamenting in this article is from somebody with very little perspective on what most people have to do just to survive.
[+] [-] joshlegs|13 years ago|reply
[+] [-] hrktb|13 years ago|reply
If I remember well teachers and medical staff have depression and other work related mental issues rates on par with programmers, so you would be right about the negativity they also face everyday.
Of course it's not the end of the world, it's just something that is not brought on the table so often I think.
[+] [-] lucian303|13 years ago|reply
All the while dealing with people around you who do not understand what you do, whatsoever. This last part is crucial and it is everywhere. I have yet to meet someone who is not an engineer or ex-engineer who actually understands what I do and what I have to deal with not only with my own code (which is far from perfect) let alone code written by some overseas contractor who just got his copy of Java for Dummies so he can learn PHP.
[+] [-] tomrod|13 years ago|reply
I'm not a professional coder, but I do a significant amount of hacking and coding for one of my research fields (Computational Economics). I noticed this cycle too--this cycle of focusing on the negatives. It really did bring me down.
I chatted with my adviser, who was married for a number of years to a child psychologist. She recommended to him that every time he accomplishes something small, get up and walk around. Do something small to reward yourself. Then, get back to coding. This inserts a positive stimuli in an otherwise negative feedback loop. The more bugs you solve, the happier you are.
I've found this to be very helpful for me. Hope if helps some of y'all too.
[+] [-] btilly|13 years ago|reply
The challenge lies in getting motivated to go from the reward back to the work. :-)
[+] [-] kranner|13 years ago|reply
My partner and I just had our first iOS game approved. We had to ship without a bunch of features we had planned for (e.g. non-English localizations) simply because we ran out of time. During the final stages of the project, we thought we'd like to do something like a web-comic, to share the human story behind the development of the game. Now that the game is approved and we're reviewing our notes and drawing the comic (it can be loaded dynamically into the game as a slideshow, and it will also go into our facebook page/company blog at http://noisytyping.com), our view has shifted from 'we could have done better' to being very pleased about the whole journey: how we started out, what challenges we faced (automating level-generation was one) and how we managed to stick to our plan and ship it. Without the postmortem, we'd probably never be motivated to make a game again.
[+] [-] trustfundbaby|13 years ago|reply
I realized that not so long ago, I was actually outgoing and cheerful most of the time, but programming has made me more surly and sometimes reactive in an insidious way. With programming you're always dealing with problems, and if you're not solving them in code, or being infuriated by something that you thought would take 30 mins but has blown your entire day, you're dealing with people problems.
"Why isn't this done?", "Why should we pay that much?", "When is it going to be done?", "How long do you think its going to take?", "Why is it going to take that long?", "Can you just squeeze this one thing into the iteration?", "That sounds easy", "Why is this broken?", "Who broke it", "Why can't you just code", "You ask too many questions" ... aaaaaack.
its just this steady barrage of crap you have to deal and you're usually the one saying "no", "we can't do that", "Why do you want to do that?" to where you just become this proxy for negativity even if you don't want to be, because ultimately you're going to be the guy cleaning up the shit when everything explodes because nobody thought to figure out how to do the whole thing properly.
Unless you're working at a real top notch engineering place, where half these questions don't come up or the top brass understand how the whole thing works, it can really mess with your attitude.
When I had that epiphany after the tradeshow, it really freaked me out to realize how professional programming was changing my attitude to people and life, so I don't think I'll be doing 100% development for much longer.
[+] [-] Evbn|13 years ago|reply
[+] [-] CamperBob2|13 years ago|reply
"Dude, you're so lucky to be a master sculptor. Always hanging out with famous models and actors who want nothing more than to strip for you. Your works will be celebrated for more than two thousand years. I wish I could do that."
"Actually being a sculptor is making me pretty miserable."
"Woah, dude. What do you mean?"
"Hour by hour, day after day, I do this. Always searching for pieces of stone that don't belong, always trying to remove the elements that aren't part of my work, rather than being able to focus on the stone that remains. I can never truly build anything, only erode. It's a negative reinforcement feedback loop. I think I'll try watercolors next."
[+] [-] Sakes|13 years ago|reply
The goal is not to write it perfectly without bugs. The goal is to release it perfectly without bugs, and to do this all you have to do is test your code often as you make changes to it. (alt tab || cmd tab is your best friend)
Now, if you are running into bugs that take you 4+ hours to resolve, you simply have not been programming long enough. Over time these will be trivial issues for you.
What is amazing about being a programmer is the ability to create amazing things. Being a programmer is not awesome because writing conditionals and for loops are badass.
[+] [-] jaggederest|13 years ago|reply
(Step 0 is possibly 'get a bug report')
1. Write a test
2. Watch the test fail
3. Write code
4. Watch the test pass (if fail, goto 3)
5. Make the code pretty
6. Watch the test pass
7. Repeat
Instead of negatives, you're looking for positives. At the end you're rewarded with nicer code than you started with and green lights all the way down.
It's all about how you frame it - why would you frame the activity you spend most of your life doing negatively?
[+] [-] redshirtrob|13 years ago|reply
The really bad part of this post is the implication that this mentality (whether one takes the author's negative point of view, or my slightly more positive interpretation) is endemic to software development. It's not. Asking the question, "How can I make this better," ought to be a fundamental part of one's daily routine. Had the author adopted this mentality in general, he might have noticed a flaw in his workflow:
1. Write some code
2. Run the code
3. Get an error message
4. Find the error and back to step 1
There are some critical steps missing. A more appropriate approach would be:
0. Think about what I'm building
1. Write some code
2. Run (Test) the code
3. Get an error (of some sort)
3.5 Think about what might have gone wrong and verify it
4. Go to step zero.
That's right, when you find an error there are two distinct thought processes involved. First you think about what might have gone wrong. This would be the forming a hypothesis step of the scientific method (I've lumped testing into step 3.5 so as not to stray too far from the author's initial workflow, but suffice it to say that testing should be a recursive call to this entire process). Once you've discovered the source of the error, it's time to consider how best to fix it. Yes, more thinking. Only then should one go back to writing production code.
Sadly, I don't think the author's method is that rare. I had a professor who referred to the write/run/test/fix method as the original genetic programming. I think that's a fair statement. The problem with this method is that one ends up with a system that may work, but with no deep understanding of why it works. Absent that understanding, it will be more difficult to improve (fix) the system.
God help the next poor soul (aka the author in six months) to work on the system. Therein lies the negative feedback loop.
[+] [-] gpcz|13 years ago|reply
[+] [-] cicero|13 years ago|reply
[+] [-] chubbard|13 years ago|reply
I think after being a programmer I have changed my outlook for the better because I realize what's possible instead of being trapped by other people's ideas/mistakes. I see how things are connected and if I changed this or that how it changes our limitations. Anyone can say "What if" very few can "Here's how." And that is really empowering and liberating.
I suppose when I was younger I was negative I wanted everything to be perfect like it couldn't be, but as I matured I see bugs, missing features, bad design as just opportunities and not the end of the world. Being late, bugs, complaining users, whatever it just doesn't bother me.
I'm not tuning them out just choosing to listen to what's really important and cutting through the bull because I expect all of it to happen. We're late ok I'll work a little more realizing I can really only make it about 10% faster, there bugs give me a reproducible test case and I'll fix it, users bitching reach out to them personally and find out what's the real problem.
And just like anything else in life, whether it's programming, football, music, or ditch digging, your attitude is your choice. The difference came when I chose to be positive...and laugh a lot more at all of the irony, bad choices we make, and gotchas that always creep up. Laughing really helps.
[+] [-] adjwilli|13 years ago|reply
[+] [-] dubcanada|13 years ago|reply
[+] [-] erode|13 years ago|reply
[+] [-] scheff|13 years ago|reply
The key for me was to document the things that I hated about the job, and avoid them at all costs, but to acknowledge that criticism is something that feeds back into an application improvement process. ie. Don't take it as personal that someone is criticising you/your work. Find methods of improving the communication channel so that you don't spend days/weeks coding only to find "that's not what I wanted! that sucks!"
I'm fortunate to have an ex hacker/programmer as my manager who knows/understands/addresses my needs very well in my current role.
At some point I stopped chasing the higher paycheck, because I recognised that with a higher paycheck comes higher expectations, demands, hardships. Look at it from the employer's perspective - "We could hire 2 graduates at your cost, at that rate we expect you to not make mistakes, and to get twice the amount of work done."
A friend earns almost twice as much as me, with similar years of experience, but he is expected to miss lunch, stay back until midnight, answer calls to China/India on a friday night. No please/thankyou/you're doing a great job. Just "do it".
Keep searching until you find the right role.
[+] [-] blueprint|13 years ago|reply
If we work in such a way that produces high entropy codebases, hides problems instead of illuminating them, or produce (or have to work with) highly inter-braided (complicated) architecture with no way or occasion in which to improve matters, then it's easier for people to be caught by grudge at their employer, clients, or circumstance. People can be influenced by these bad circumstances to abandon themselves, and in doing so, their resultant ignorant behavior will make their mind mind become dark. This is a most dangerous circumstance for a human being to live in, so the task of the modern programmer is to find out what they have worth living for, to find a good self, and to protect themselves from wrong relationships and from destroying themselves (through loss of simplicity in one's life) such that they can effect their benefit for themselves and the world. Without individual awakening then it doesn't matter what profession they hold, they still can't guide their life properly. So the most important teaching for programmers to save their way of life is that they have to understand properly what life is, how great a teaching it is for us, and just how precious is the opportunity that we have been given through our lives as human beings.
[+] [-] otakucode|13 years ago|reply
You're not 'focusing on the negatives', you're getting to be wrong, a fantastic opportunity. Most people don't get to be wrong. They persist in their wrongness and swim about in a sea of mediocrity with no sense of personal advancement. To get to be wrong on a regular basis is nothing short of exciting. Sure, others will misunderstand it. Managers and business types will not understand why you simply couldn't do everything flawlessly from the start and they'll try to give you a hard time about it. But it doesn't really matter. No matter how hard they push you, they can't make you think. No one can. It has to be undertaken entirely under your own will. And when you do so and come up with something wrong - you know you are actually guiding yourself to develop rather than stagnate.
Go on, be wrong! And then never be wrong in that way ever again!