News for hackers. Stuff that matters.
Re:The Mature Programmer by knieveltech on Sunday December 04, 2011 @12:07AM (#3309922)
"The Mature Programmer would say that "clever code is almost always dangerous code". But fuck him. The problem is that when you get carried away with being "mature" you suck the joy right out coding."

I counter this with the following:

Fuck the joy of programming. On every occasion I've seen a multi-million dollar project crash and burn it was directly attributable to PM's lending credence to developers bitching about "boring" technology.

Here's the real joy of professional coding: 40 hour work weeks with no after-hours crisis pager. The only way you get those is through a rock solid codebase that's so boring you can ramp up the new guy in two days.

Re:The Mature Programmer by shadowsun7 on Sunday December 04, 2011 @04:06AM (#3310273)
But he's not arguing that at all! If you've read the entirety of the essay, he's saying that there has to be a balance between the needs of a job and the compulsion to have fun/showoff/be a hacker. (And he says it in one of the most reasonable ways possible.)

I think there's real value in this. After all, there's a real motivation to want to write amazing stuff to show off to your friends (e.g make them say "WTF how did you do that?"), as well as play with new technologies; and as an engineer you have to worry about a different set of important issues (e.g. is the project on time?/ what needs to be refactored?/what to bring up in the next team meeting?). He's arguing for a way to reconcile the two while at work, beyond just programming on personal projects on nights and weekends^[1]

^[1] And that's leaving out the section at the end where he argues about sticking to a set of engineering best practices, and not trusting yourself to be good enough to know when to break them.

PS: Also, see georgemcbay's comment http://news.ycombinator.com/item?id=3310114 on how the author knows what he's talking about.

Re:The Mature Programmer by absconditus on Sunday December 04, 2011 @01:01AM (#3309990)
This is exactly why I still believe that what we do is not engineering. How long would a civil engineer be employed if he refused to use proven techniques and complained that he was not having enough fun on the latest bridge project? This nonsense might be fine for game development, but there is a great deal of software that affects people's lives. It is time for our profession to grow up.
Re:The Mature Programmer by randomdata on Sunday December 04, 2011 @02:49AM (#3310159)
I'm not certain we know enough about the domain to say the profession can grow up. We're still building bridges by placing downed trees across rivers. It works, well even, but we're still trying to build a multilane causeway and it is going to take a lot more trial and error to get there.

I believe it is a good thing that we have people working with all types of mentalities. People building software to power airplanes can use the downed tree and know it is going to work, even if it is not pretty and requires a lot of extra effort. People building web startups can experiment with the cutting edge technology and see how it fares, slowly passing the good back to the more conservative groups.

I think we're pretty lucky that we, as an industry, don't need to completely grow up. It keeps us constantly trying new ideas, some of which are good.

Re:The Mature Programmer by wladimir on Sunday December 04, 2011 @05:03AM (#3310332)
Completely agreed. Software engineering is not mature yet itself, so pretending to be all-mature about it by sticking to 30-year old rigid "best practices" can be counter-productive at best.

People sometimes forget that new techniques might be more robust and safe than old ones, as various insights have been gained over the years.

Your other point is also good. The technology to choose depends on the domain. Web startups and airplanes/weapons being the extremes. There is no feelgood overall advice that applies to everyone.

Re:The Mature Programmer by _delirium on Sunday December 04, 2011 @07:04AM (#3310510)
How long would a civil engineer be employed if he refused to use proven techniques and complained that he was not having enough fun on the latest bridge project?

That's actually a common aspiration! You can't experiment a lot in a low-level job, but lots of people in the bridge-engineering business wish they had more leeway to experiment with new solutions, even if it wasn't quite at the Frank-Lloyd-Wright or Calatrava level of experimentation. This usually gets blamed on the bifurcation between big-name-architect vs. just-implement-it civil engineer, splitting a role that was more historically integrated between the design/engineering. Also, some blame it on crushing layers of government bureaucracy/regulation.

Re:The Mature Programmer by shasta on Sunday December 04, 2011 @11:08AM (#3310916)
This is also why you'll find bridges that are under capacity. Some engineer was experimenting with a design he didn't fully understand.
Re:The Mature Programmer by ryanklee on Sunday December 04, 2011 @04:52PM (#3311968)
Come on. Citation please. That's a pretty wild assertion.
Re:The Mature Programmer by gaius on Monday December 05, 2011 @09:18AM (#3314647)
Re:The Mature Programmer by ryanklee on Monday December 05, 2011 @09:34AM (#3314701)
Interesting information, but it doesn't support the assertion made by parent that experimentation has (often, it seems implied) been the root cause of poor bridge design implementation.
Re:The Mature Programmer by yxhuvud on Sunday December 04, 2011 @04:13AM (#3310279)
The profession will grow up as the tools mature. The reason engineers don't use new flashy techniques for bridge building is that there isn't that much happening[].

[] For the standard everyday bridge. New techniques and solutions are tried out for exotic bridges - bridges for high speed trains and such.

Re:The Mature Programmer by dap on Sunday December 04, 2011 @02:30AM (#3310133)
Don't paint us all with one brush. I suspect there's a significant bias in observation here because it's the sexy, fun stuff that everyone hears about. There are lots of people taking the profession seriously, but many of them are behind corporate walls or just not focused on making their work look flashy.
Re:The Mature Programmer by click170 on Sunday December 04, 2011 @01:26AM (#3310026)
I think the problem comes from defining what 'grown up' is, because in my experience it changes depending on who you ask (corporate employee vs consultant).
Re:The Mature Programmer by drumdance on Sunday December 04, 2011 @03:55PM (#3311786)
What an individual programmer or even a team does may not qualify as engineering, but the infrastructure that has evolved over the last 30 years provides something approaching the reliability of the Brooklyn Bridge.

One nice thing about software right now is an "engineer" can build on the code created by tens of thousands of other "engineers."

Re:The Mature Programmer by rimantas on Sunday December 04, 2011 @05:42AM (#3310395)
I think domains are too different for this analogy to apply. When building bridge civil engineer knows exatly the environment wher it will stand and pretty much knows all the likely variations of it. Software engineer? Not even close. I'd argue, that sofware solutions are _more_ robust given all the uncertainty.
Re:The Mature Programmer by davedx on Sunday December 04, 2011 @10:13AM (#3310796)
At the place I work, every other project is crashing and burning, and we use Java, Oracle, Struts, SOAP and the most serious, enterprise solutions with rock solid support you can think of.

When you're working overtime and you're working with old, boring, over-engineered technology, the only thing that's left is the joy of programming.

Re:The Mature Programmer by josephg on Sunday December 04, 2011 @09:42AM (#3310743)
Fuck the joy of programming.

Are you fucking kidding me? Motivation isn't something you can just ignore. If you aren't motivated to work, you will eventually either stop working or hate your job. (Why would you keep doing something you don't want to do?)

Maybe if you're working with good people and getting paid well it'll be ok, but in that case you're relying on the people around you to motivate you. You will be less productive and less happy for 40 hours a week than people who honestly love the work itself.

Re:The Mature Programmer by knieveltech on Sunday December 04, 2011 @10:05PM (#3312780)
"Are you fucking kidding me? Motivation isn't something you can just ignore. If you aren't motivated to work, you will eventually either stop working or hate your job. (Why would you keep doing something you don't want to do?)"

I most certainly am not kidding you. You want to talk about motivation? How's a mortgage, a wife, a car payment and a kid on the way for motivation?

I'd take a job at McDonalds if that's what it took to keep my family afloat, and while I'm in a position where I do frequently enjoy the work, I've had plenty of jobs I didn't enjoy. Simply put, whether or not I'm having fun at any given moment isn't really relevant. Paying the bills is.

Re:The Mature Programmer by radicalbyte on Sunday December 04, 2011 @02:23PM (#3311477)
The problem is, when you have 20 people of varying abilities hacking away for their own definition of the "joy of programming" on a project, it has a tendency to collapse under its own weight.

When you've only every worked on greenfield projects, or are working on a start-up who's only aim is to sell up before they explode, then yeah, code for fun. Just make sure that you're not expected to support it for 5+ years.

Re:The Mature Programmer by dustingetz on Sunday December 04, 2011 @11:37AM (#3310982)
well, outside the startup community, there is a whole world of people who work a boring job so they can raise a happy family, or play with powerboats, or whatever. less productive, sure, but nobody really cares outside of a meritocracy. and who are we to say they are less happy.
Re:The Mature Programmer by ryanklee on Sunday December 04, 2011 @04:50PM (#3311963)
> boring job

and

> who are we to say they are less happy

Well, it's fairly uncontroversial and trivial to my mind that a less boring workday makes for the happier employee, and happier employees make for happier people -- ergo, it can be safely said that to the same extent someone works a boring job, they are that much less happy than the person who works a non-boring job. It's not a matter of unjustified judgment at all -- who the hell doesn't want a job that instills a sense of self-fulfillment?

Re:The Mature Programmer by j_baker on Sunday December 04, 2011 @10:24AM (#3310821)
How old are you? Because usually when I hear this speech, it's coming from some 25 year-old who gets a couple of years of experience under his belt and is convinced that qualifies him as a wise old programmer who can condescend to all those younguns who don't know how to build a program (regardless of whether they actually are younger or less experienced than him).

Guess what? People want their jobs to be fun. Maybe you're a robot who only cares about the most efficient way to build a product, but I'm not. And I'm not going to apologize for wanting to build a stable and fun to build product.

Re:The Mature Programmer by knieveltech on Monday December 05, 2011 @12:04AM (#3313183)
"How old are you?"

36.

"Because usually when I hear this speech, it's coming from some 25 year-old who gets a couple of years of experience under his belt and is convinced that qualifies him as a wise old programmer who can condescend to all those younguns who don't know how to build a program (regardless of whether they actually are younger or less experienced than him)."

Cool story, bro.

"Guess what? People want their jobs to be fun."

People want all kinds of shit. Some get what they want, other's don't. What's up with this over-emphasis on being entertained at all times?

"Maybe you're a robot who only cares about the most efficient way to build a product, but I'm not. And I'm not going to apologize for wanting to build a stable and fun to build product."

Touchy much? Seriously who asked you to apologize for anything? Do you have a track record of blowing up multi-million dollar projects? Or writing "clever" shit that blows up, resulting in a bunch of overtime and/or after-hours pages?

Re:The Mature Programmer by cageface on Sunday December 04, 2011 @03:47AM (#3310252)
I don't disagree with this in general, but the tricky thing about programming is that there is often more than one legitimate way to accomplish any given goal. And, in many cases, the established practice is significantly more cumbersome than some of the alternatives. For instance, all the developers that cast off J2EE for Rails were certainly disregarding common wisdom, but in many cases wound up saving their employers time and money by bucking the trend.

I know I was at least 5x as productive in Rails as I had been in Java/Tapestry, but at the time (Rails 0.8) if could have easily been argued that I was making selfish technology choices.

Re:The Mature Programmer by kenjackson on Sunday December 04, 2011 @10:35AM (#3310840)
There's a difference between using a new technology and being clever. I've seen clever -- I've been clever. I've seen the "immature" dev who comes in and says, "So here I've written a dynamic binary interpreter that will inject into all known JS engines which will give me the ability to modify stackframes of the running Javascript program. So in scenarios where I write this code in JS, part of which will block a DCE, because I need a specific value on the stackframe, I can now access this below in Javascript. How you ask? With inline assembly in JS -- which I've also added. So now you can create a wide range of selectors."

"Like doing this common technique from jQuery?"

"Sure, if you want to suck the life out of programming you'll use that, but I prefer to keep my job fun. BTW, this will break on every rev of Chrome, so I have an alert set up to remind me to fix it for each new version. Anyways, I already checked it in. See you in three weeks, I'm going on that vacation I forgot to tell you about."

Re:The Mature Programmer by einhverfr on Sunday December 04, 2011 @07:42AM (#3310560)
And for certain use cases that is good. However I wonder how many of those who did so were even aware of what the costs of moving to a solution which doesn't really readily support (and indeed actively discourages) solid database engineering would be when moving forward into new markets. Indeed the same thing is going on with a lot of NoSQL adoption and I think a lot of people are going to be badly bitten by choosing it without really understanding what the tradeoff is.

My own view is that ideal design processes in fact look at the established practices sympathetically before disregarding them. Where they are not applicable, they should be disregarded.

Re:The Mature Programmer by radicalbyte on Sunday December 04, 2011 @02:34PM (#3311515)
To be honest if Rails is capable of replacing J2EE for your application, then you were working on a toy.

That's all part of the architectural choice: if you're building a toy, then you don't to build it with an industrial class framework.

I've had the experience in reverse: working on a system built on a toy framework which started to fall to pieces the second it became obvious* that it required industrial level tooling. In that case it lead to irreplaceable data loss.

* It was obvious to me from the start that an Enterprise-level framework was required. I got the hint from the 30-page auditing requirements specification.

Re:The Mature Programmer by cageface on Sunday December 04, 2011 @05:15PM (#3312039)
Oh come on. The evidence that tech like Rails can be used to build non-toy apps is abundant. When shops like Thoughtworks are bailing on Java for Ruby you know you can no longer shut down rational discussion of choices with weasel words like "toy" and "enterprise class". Rails is not the hammer for every nail but it wasn't long ago that doing the "right" thing meant pounding in every nail with a walrus like J2EE.
Re:The Mature Programmer by einhverfr on Sunday December 04, 2011 @07:58PM (#3312458)
I think it's interesting that the emphasis on defending something like Rails is based on a comparison to J2EE. My real gripe with Rails is about how it disparages good enterprise-class database practices, and so this is why I'd call it a "toy" system.

That doesn't mean you can't do interesting things with it, but rather that you are essentially talking about an application closely tied to the db schema it stores its data in. The idea of enterprise-class applications sharing their data in a common database is something entirely foreign to (and incompatible with) the Rails way.

This doesn't mean it can't be used in an enterprise environment. For example, you could have a Rails/MySQL app with data imported periodically into a PostgreSQL multi-application database, but I wouldn't call the former "enterprise-class."

Re:The Mature Programmer by radicalbyte on Monday December 05, 2011 @12:31PM (#3315491)
> When shops like Thoughtworks are bailing on Java for Ruby

They're swapping Java for Ruby, not Java for Rails.

Ruby is, performance aside, a really nice language. It's certainly possible to build something "enterprise class" in Ruby. Especially as soon as you start treating Ruby as a meta-language and build your own DSLs in it

Rails on the other hand isn't really enterprise grade. It's constrained by Active Record, and the immaturity (and lack of popularity) of the alternatives.

Re:The Mature Programmer by mahyarm on Sunday December 04, 2011 @02:46PM (#3311557)
A codebase that I can ramp up on in 2 days is a well made codebase, not a boring codebase. Byzantine Java codebases that use an ancient version of struts and reams and reams of useless badly design xml configuration files are boring and take forever to ramp up on.

Younger people dislike C++ and Java codebases not because they're boring, but because they come with reams and reams of badly designed verbose crap that takes forever to learn and wastes everybody's time. They don't have to be, but statistically they do more often than not.

Re:The Mature Programmer by konstruktor on Sunday December 04, 2011 @04:50AM (#3310322)
I don't read him advocating "fun" programming but describing some mental traps many of us have fallen into. "the correct adjustment for post-mature coding is very small" sounds very much like understanding the principles behind good practices and knowing the rare cases when it's reasonable to deviate from the practices because of the underlying reasons.
Re:The Mature Programmer by einhverfr on Sunday December 04, 2011 @07:43AM (#3310563)
I read him mostly as saying "don't take this so far that it kills the creative spark" which is a very good caution.
Re:The Mature Programmer by calibraxis on Sunday December 04, 2011 @06:32AM (#3310457)
I think risk management [1] is the best way to approach these decisions. When evaluating a tool/technique you're whose tradeoffs you're not entirely familiar with, simple rejectionism can kill you later with the poor maintainability and complexity of the toolset you just happened to currently be more familiar with.

Sensible risk management means you have fallbacks when a particular risk doesn't work out, while reaping the benefits of your speculative investments.

That said, while I don't like simple rejectionism (and probably would not tolerate such an environment for long), it's probably a lot better than teams which say Yes way too readily.

(Also, I question the actual cleverness of so-called "clever" ideas. Clever as in the random pun that took a fraction of a sec to think up, or clever as in the good hack that cuts the gordian knot?)

[1] http://howwework.thinkrelevance.com/stakeholder_narrative.ht...

Re:The Mature Programmer by derleth on Sunday December 04, 2011 @12:16AM (#3309931)
I bet IBM is full of mature programmers.
Re:The Mature Programmer by kenjackson on Sunday December 04, 2011 @12:20AM (#3309938)
Market cap $225B. I'm sure it is.
Re:The Mature Programmer by BCM43 on Sunday December 04, 2011 @02:17AM (#3310108)
You confuse mature programmers with mature marketers.
Re:The Mature Programmer by wattjustin on Sunday December 04, 2011 @02:36AM (#3310140)
I will say IBM is run on sticking to procedures and tried and true methods. It may not be the most inspiring workplace, but it gets things done. I can't say it's what I prefer, but just a bit of insight. This doesn't apply to all subsidiaries, teams, and groups, but by and large this is what I see.
Re:The Mature Programmer by bediger on Sunday December 04, 2011 @11:46AM (#3311006)
I'm going to disagree with "getting things done". Three words: IBM Global Services.
Re:The Mature Programmer by aangjie on Sunday December 04, 2011 @12:45PM (#3311178)
Well, spent the first 3 years of my life and literally fell sick at being treated like kid playing with fire..:-P.. a master's degree,1yr in a startup and 1 year freelancing later am just beginning to find some semblance of balance between the pressures..
Re:The Mature Programmer by wattjustin on Sunday December 04, 2011 @01:31PM (#3311314)
I should say, within any one team working on something these procedures are used to get things done. I don't speak for the company as a whole but this seems to be the precedent for most.