11 ms·
How to be a sane programmer
- Duhck 13y agoHeres the problem I have with this entire discussion -- and this post does address it a bit -- but programming IS a creative role and needs to be treated as such. Many organizations hire programmers as technical roles, but they are generally creatives. A lot of them are night owls, who ebb and flow between long productive stints and proverbial 'writers block'. Many of the best developers I know have a creative desire and just writing code for 10 hours a day doesn't satiate it. I think we need to start treating developers as creatives and giving them the processes they need to be successful and not be stressed, overworked, stretched thin, etc.
- midas007 13y agoRoles and titles cause people to associate with and get put into boxes, and deny latent talents and dismiss insight that could very well be valid. Mgmt consultants make tons of cash repackaging internal feedback into neat, glossy deliverables by basically listening across organizational, preconceptual boundaries. Also: T shaped people: http://zurb.com/article/11/the-t-in-team http://zurb.com/article/11/the-t-in-team
- dropit_sphere 13y agoThis will never, ever, ever happen. There is too much money, for both sides, in pretending this isn't true. The business side has been entrusted with a lot of money, its own or someone else's. Success has already been achieved. As such, it approaches things from a mindset of risk reduction. And the absolute worst thing possible, from a risk-reduction standpoint, is creative work. It's unpredictable, you don't know when you've got an end product, and it involves dealing with workers who have egos, who often work on things you don't understand. It is unmanageable, which obviously troubles those whose job it is to manage. The most common approach, so far, has been to ignore this scary possibility: Keep projects as low-level as possible, spread responsibility far and wide (to reduce risk, not for optimal efficiency), and keep everyone wearing business casual. Developers are (often) in the weird position of Ozzy Osbourne and other rock stars: potheads whose potheadery became valuable. What the developers know, however, is that businesses don't really want what they have to offer. They don't want to see the full effect of a bad trip. For every Bieber who turns crappy branding to gold in the teen girl demographic, there's Joe Concept Artist who's experimenting with some new grooves, but will never catch on. For every Zuckerberg who can bang out a social network in PHP, there's some dedicated open-source hacker whose dream is to make Lisp accessible to the common man. And yet: the money guys are offering money. Just swallow your pride, play "Stairway to Heaven"[1] at the wedding, and pretend you've never had crazy eyes when talking about homoiconicity, and the rent will be paid. [1]Nothing against the song.
- deleted 13y ago[deleted]
- marktangotango 13y agoLove this reply, it's a summary of cold hard business reality. Seems cynical, but pragmatic and jives with everything I've witnessed. Maybe the parent is coming from a perspective of fostering the next Whatsapp, were 32 people create $16 billion+ in 'value' from within an existing business?
- dasil003 13y agoI love this comment, but it's not the whole story. Mark Zuckerberg made his billions because he built his own company. Musicians do not necessarily need to do this (although it helps them avoid getting screwed), why does Ozzy Osbourne make bank working for other people? Because his value is readily identifiable. You can see his ticket and album sales and TV ratings right in front of you. Everyone can watch his act and evaluate it. The problem for programmers are that their talent is extremely difficult to evaluate. The best programmers will build a system that avoided so many problems which management will never even have a clue could have happened. Meanwhile, a "rock star" might come in and bang out a prototype that looks so slick and is complete in such a short time that management thinks he is god's gift to programming even if under the hood the code is unintelligible and unmaintainable; when phase two modifications are a disaster, the blame could fall to the new programmer who is objectively much better but is saddled with a terrible technical debt that no one knew about. It's a classic market for lemons. So management is constantly worried that they have lemons. Giving space for creativity would be much more of a possibility if it was easier to identify the programmers who deserved it.
- chris_mahan 13y agoAmen Brother Amen!
- edgarallenbro 13y agoAs a dev who also sings for a cover band, this post so completely describes my life its scary. But, I have a bit of a different philosophy. I think that if you really love something, you'll not only do it for free, but pay to be able to do it. There are some people who love coding so much that you can't get them to stop. I am not one of those people. I love it enough that I can stand being at my job for 40 hours a week, and I enjoy the time I spend there. What I really love is Rock & Roll. When I was in high school, I footed the bill for all the tickets my band couldn't sell just for the chance to play on the same stage in Hollywood that a bunch of my idols had played on. Now I play in a band that plays 90's prog metal covers, something that someone from an 80s/90s pop cover band said no one would ever care about and that we could never get paid for. He was wrong. People actually love us because instead of just settling for doing what paid, we did what we love, and it just so happens that there was a need for what we love. We're doing our first paid gig in a few weeks.
- seivan 13y agoThis! I hate being treated as a code monkey.
- buckbova 13y agoThe majority of programming is analyzing a problem domain and applying the right design pattern. It is not creative. The longer I am at it, well over a decade now, the more this applies.
- eikenberry 13y agoI disagree that development has come anywhere close to optimizing our design patterns. People are still coming up with better patterns for even basic CRUD and static site generation apps. Coming up with new patterns and improving existing patterns is what we do.
- buckbova 13y agoDesigning and implementing a software project is not creative. It is learned. It takes methodically analyzing requirements and designing a solution based on learned patterns through study or experience. We engineer software. "Coming up with new patterns and improving existing patterns is what we do." Chances are you are not "coming up with new patterns" but instead re-discovering existing patterns.
- netfire 13y agoWhat do you define as creativity then? You could say that the majority of writing is composing sentences with nouns and verbs if you look at it from such a low level. (or that artists are just applying specialized techniques to add to or subtract from a medium). I suppose that you could leave the creativity in engineering to other people (designers, product managers, etc), but my experience has been that you end up a far better product when you engage developers early on in the brainstorming and product planning process and let them help decide what the product should be.
- Duhck 13y agoSo this is what I was getting at precisely. As buckbova said, programming is problem solving, and solving problems is a creative process. If you treat developers as creatives (like you do design, etc) you get a superior product and work environment, and you involve more people in the product brain trust.
- lgieron 13y ago> Many of the best developers I know have a creative desire and just writing code for 10 hours a day doesn't satiate it. To paraphrase, many of the best X (X being developers, managers, accountants, salesmen etc.) have a creative desire and just doing their job for 10 hours a day doesn't satiate it. That's why they indulge in create activities in their free time.
- FLUX-YOU 13y ago>but programming IS a creative role and needs to be treated as such. We need to distinguish between creators and people who just implement, because there is a lot of work that doesn't involve new ideas. Complicating this is the fuzziness between the titles 'engineer' and 'programmer' and 'developer'. Much of this just seems like growing pains for a field that's relatively new to humanity.
- orkoden 13y agoHow very true. Abstract reasoning and pattern recognition from other areas help programming hugely.
- tedkalaw 13y agoI still find the pressure to work on side projects in your free time difficult to come to terms with. There's often discussion about how if you don't like what you're doing, then you should find a new job - and easily, if you're in the bay area. I know a lot of really talented devs that don't work on side projects because they are completely consumed by, and love, their work and can't imagine doing anything else. What if your passion is your day job? Having a github full of side projects is helpful when pursuing a job, but I find it difficult to go hard at work and put 100% in and then come home and work on side projects. Usually, I'd rather spend time with friends and family. This seems to disqualify me from a lot of job postings.
- midas007 13y agoYeah, if it's not a voluntary act, then demanding volunteer work would be a "voluntold" situation. That's not cool.
- danso 13y agoI justify work on side-projects when they can both serve my personal goals and the lessons (not necessarily the actual code) can be used to make work easier. So I guess in some ways it feels like doing work at home, but I guess I count it as offsetting stress/tedium at work.
- Volundr 13y agoYeah this is something that's bothered me for a long time. For awhile I felt bad and tried to focus on doing the whole "side projects" thing, but now I've just come to accept that some people will never hire me, and that's OK. The fact of the matter is that I have a job where I work on different things and am encouraged to learn. It's not a dream job, I don't "love" what I do, but I like it. The fact of the matter when I get home from my 8 (ok, often 7) hour day, I really don't feel like programming anymore. I feel like curling up on the couch with my girlfriend and watching a movie. Or hanging out with friends, or going for a motorcycle ride. You know, those things that keep you from burning out? So, at this point I've decided that if someone doesn't want to hire me because my Github profile isn't cool enough, well OK. That tells me that the culture there values work over work/life balance, and I don't want to work there anyway. I work on side projects when I have to urge to, and rarely does anything worthwhile to anyone but me come out of it. But I'm done feeling guilty about it.
- michaelochurch 13y agoImpostor syndrome is an artifact of dimensionality. There are hundreds of answers for "What does it mean to be a good programmer?" We have back-end and front-end, "devops" and "DBA" and "data science". We've let the colonizers (business guys) divide us for their purposes (not ours) and we're muddled. It's hard to know if we're good at our jobs because our jobs are constantly changing (and, sometimes, in ways that leave capability and success negatively correlated). The colonizing gendarmes who are supposed to be able to evaluate our work are even more clueless. What we do would be highly dimensional (i.e. specialized) if we weren't a colonized people. But we'd be able to come to peace with it. We wouldn't fret others knowing more than us (which happens to everyone) if we weren't constantly watching our backs. We are constantly meeting people who know more about certain topics than we do (and, reciprocally, so are they). It wouldn't be an issue if we had more career and income security. It's not something about programming that makes people sick. It's not an intrinsically stressful activity. It's far less demanding (speaking of the work itself, not context and social dynamics) than over 75% of paid labor. What's hurting us is that we're a lost, conquered, and scatterd tribe. We think we're elite specialists, but we've done such an obnoxiously bad job of fighting for ourselves and our own value as to let ourselves be typecast to business subordinates, and it's horrible. It would actually be a win for the more progressive business people (as well as us) if we could get ourselves out of this. Would you want to be operated on by a doctor with the pay and social status of an average programmer? Of course not. Well, similarly, we'd make better products if we got ourselves out of the "business subordinate" trap, and pretty much everyone would win.
- blindhippo 13y agoThe bigger win would be to flip the traditional hierarchy over and realize a situation in which the "business" side of things works FOR the talent (i.e. value generators), rather then the other way around. In my market (not SV), tech talent is treated like the help. There is no real association to join - the only groups that exist are scattered, un-organized and generally not interested in improving working conditions (that would be far too socialist). I suspect this type of change would require a social revolution. It will come eventually I hope, but I doubt it will come soon enough for me to benefit from.
- 13y ago
- deleted 13y ago[deleted]
- qwerta 13y agoI think problem are working conditions. Modern programmer is expected to work in coffee shop on tiny laptop, practically worst conditions imaginable. If I ask for decent private office and 3x32" screens I just get blank faces and bullshit excuses. Since I started working for myself remotely, I can sustain 10 hours of uninterrupted concentration. Before in office it was more like 30 minutes of concentration per day.
- blindhippo 13y ago100% agreed. I work at a "startup" who has bought into the open office concept because 1) it's cheap, 2) it "fosters creativity and problem solving in a team". Point 2 is complete and utter bullshit, especially when the company also fosters a culture of interruption. If client services has an emergency, it is now everyone in developement's problem. They have 3-4 emergencies a day... A lack of walls, or ability to control interruption seriously degrades the working environment and makes the actual development work extremely frustrating and often not full-filling. One day, in 50 years, people will look back at the current crop of MBA inspired management theories and will just shake their heads that we were trying to run software businesses like this.
- themodelplumber 13y agoHow much of your productivity gain from the 3x32" screens is attributable to extra space for persistent applications (i.e. always keeping an IDE open on screen N)? Just curious.
- qwerta 13y agoI had 4x22" until recently, second screen adds 50% productivity, third 25% and forth about 12.5". Upgrade to 3x32" is underway, so I can not provide data for those. I will probably keep old 22"s around for some statistics, visualisations etc. I use screens in portrait mode, so it fits more code. I usually keep left screen for navigation (file managers, terminals), center screen for IDE and right for documentation, notes and communication. I also use virtual desktops to switch window layout for various tasks. For example I consume twitter and rss feeds in separate configuration. I am not saying everyone would benefit from this setup. I analyze large heap dumps and do lot of concurrent debugging. But quiet office, decent screen and chair should be a starter for any self respecting programmer.
- daphneokeefe 13y agoWow, thank you for this #iamdoingprogramming
- chris_mahan 13y ago"Programming, like writing, painting, and music, is chiefly a creative endeavor not a technical one. " Yeah, like writers, painters and musicians aren't also crazy...
- agentultra 13y agoProgramming has been at times my sole obsession. However in the long run it has been and always will be a means to an end. I think the advice to look afield is good. Gerald Sussman seems to agree as he often looks to biology for new ideas. Ideas are not born in a vacuum after all. They need to form hunches and meet other hunches and be given time to cook. That's a number of metaphors... but I think you get where I'm going with this. I hope. Spend time learning the fundamentals for sure but branch out as soon as you can.
- yangez 13y ago> Programming, like writing, painting, and music, is chiefly a creative endeavor not a technical one. Practice... will not make you a substantially better programmer. It will just make you more efficient with your tools. Show me a world-class writer who doesn't obsess about his writing with every waking moment. Show me a master painter who doesn't paint every single chance she gets. And show me a music prodigy who hasn't slogged through 15 years of mind-numbing practice every single day. Only then will I believe that these artists are just getting more "efficient with their tools". In creative fields, it's even more important that you put in a huge volume of work. That's the only way to connect the dots and create something truly unique.
- atrk 13y agoSo your argument is that the primary difference between geniuses and the rest of schlubs is sheer volume of rote practice? I think you're confusing creativity with tool proficiency.
- city41 13y agoI think there is a middle ground between the OP and your comment. I agree with you that the best way to get good at programming is to program. But I also agree with the OP that having other hobbies, interests and letting your mind work on different things will also help you. The ideal balance is some mix of side projects and hobbies.
- FLUX-YOU 13y agoWhat if there is just another dimension to this? OP could be wired to be very productive if he doesn't have side projects and instead focuses on hobbies. yangez's examples (parent of your comment) could be wired to only be very productive if they do nothing but become immersed in their work. What if some of us can only thrive with imbalance by nature?
- dmur 13y agoI agree that you must put in time to get better, but I think the difference with programming is that more hours does not necessarily result in getting better. Actually, now that I think about it, maybe that's no different than the examples you provided. If you practice violin 14 hours a day, will you really be better than you would if you practiced 8 hours a day and spent the other 6 doing other things? When programmers get beyond a critical daily/weekly threshold, putting in more hours hurts more than it helps. The brain gets tired of solving problems, and when that happens, pushing yourself further is not the answer. The answer is to do something else, especially something involving physical activity, to allow your brain time to recover. I believe that many programmers fundamentally do not understand this concept, thus they drive themselves crazy trying to push harder and harder. Yes, you may write more lines of code that way, but at what cost?
- einhverfr 13y agoI used to find, btw, the pressure of programming difficult to deal with on an ongoing basis. Then one day it occurred to me: Perfection in the big projects doesn't matter. The world is full of crap software. Perfection in the little pieces however really matters, and this makes it possible to build better software. I still have stressful days, usually involving bug reports and unhappy users. However, for the most part that realization meant that rather than the stress being an ongoing thing, sometimes lasting days or weeks, it became an occasional thing usually lasting only hours, and the sense of beauty in seeing successful things come together has become more common. That doesn't mean you spend time chasing perfection on every little detail because a lot of things are legitimate tradeoffs and you won't know some deficiencies until it is actually used. To me that is craftsmanship.
- Bahamut 13y agoI recently felt the pinch of stress at work...it wasn't due to being overworked though - it was due to being overstressed, due to insane work deadlines that had me concerned about getting stuff done on time. I'm starting to balance that aspect of my life better, with the realization that I shouldn't drive myself crazy just to meet the deadlines given to me. It's ok to let deadlines slip by if they were unreasonable to begin with, but still do the best I reasonably can.
- channikhabra 13y agoDisclaimer: Off Topic I am feeling like this (burnout/mental sickness of programmers) is becoming a successful theme on HN lately. Many-many posts are popping up to front page. Not like it's a bad thing, being myself a victim it feels good to read experience of fellow coders who has seen what I am about to see or how to avoid seeing it, but still, it is becoming a theme. I am imagining hordes of posts on this topic coming up. Or may be we already have 'em, just the good ones are popping up to front page. There are actually more than one pattern emerging. I think I gotta hint of for writing posts more likely to hit front page.
- stcredzero 13y agoImposter Syndrome So, when I was growing up, where the family had to drive 50 miles to visit other Asians, I started to realize there was a pattern to how bumf#cks would come circling in for what was in their minds the justified pleasure of humiliating a non-white person. Most people were decent, but I and my family members stuck out. I notice the same sort of circling at some programmer meet-ups here in the bay area, though I don't think it's my race that prompts it. Programmers make good money, are highly sought after, and in many companies are positively coddled. Just about every group that found itself in such a position has developed some small sub population of arrogant, entitled jerks. In retrospect, I may have been guilty of being a little bit of that myself. One might like to think that good programmers are also good at thinking rationally in general. That's not how it works. Being good at programming just trains us to think rationally in a very specific context. The rest of the time, we're primates vying for a place in the social hierarchy. The best we can hope for are social structures and patterns that co-opt such tendencies for the uncovering of truth and the good of the group. Seeking social contexts that humanely succeed at this should underly one's seeking for a place of work. It's hard to do this, and most of the time, people find a situation that achieves group cohesion and effectiveness through an "us vs them" dynamic.