10 ms·
The Mature Programmer
- lalalalaXX 15y agoI read this as "A mature programmer mangles their time and productivity well"
- knieveltech 15y ago"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.
- derleth 15y agoI bet IBM is full of mature programmers.
- wattjustin 15y agoI 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.
- bediger 15y agoI'm going to disagree with "getting things done". Three words: IBM Global Services.
- aangjie 15y agoWell, 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..
- wattjustin 15y agoI 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.
- kenjackson 15y agoMarket cap $225B. I'm sure it is.
- BCM43 15y agoYou confuse mature programmers with mature marketers.
- deleted 15y ago[deleted]
- 101001010101 15y agoWords of wisdom. I'll take ultra simple, "boring" code over clever code every time. As a not-so-famous musician once said: "It's a fine line between clever and stupid."
- absconditus 15y agoThis 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.
- dap 15y agoDon'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.
- click170 15y agoI 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).
- randomdata 15y agoI'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.
- wladimir 15y agoCompletely 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.
- cageface 15y agoI 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.
- einhverfr 15y agoAnd 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.
- kenjackson 15y agoThere'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."
- shadowsun7 15y agoBut 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 http://news.ycombinator.com/item?id=3310114 on how the author knows what he's talking about.
- konstruktor 15y agoI 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.
- einhverfr 15y agoI read him mostly as saying "don't take this so far that it kills the creative spark" which is a very good caution.
- calibraxis 15y agoI 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.html http://howwework.thinkrelevance.com/stakeholder_narrative.ht...
- josephg 15y agoFuck 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.
- dustingetz 15y agowell, 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.
- ryanklee 15y ago> 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?
- deleted 15y ago[deleted]
- radicalbyte 15y agoThe 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.
- davedx 15y agoAt 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.
- j_baker 15y agoHow 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.
- knieveltech 15y ago"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?
- mahyarm 15y agoA 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.
- _m4 15y agoI disagree to reduce programmers to geeks that only have fun when there is a ton of new technology and a fancy feature that only they like. Most people I've worked with have fun when the project goes well, customers are happy and the like. A really post-mature programmer understands the values behind so that he does not need rules any more.
- biesnecker 15y agoExactly. There is much joy to be derived from a codebase that works, that is maintainable, and that is understandable.
- codeonfire 15y agoI have to object to this blog. While some points I agree with, this is more formulaic drivel where some self absorbed person tries to tell everyone else what makes a [great|rockstar|mature|senior] [programmer|hire|architect|genius] and how he/she is one because why else would he/she be writing this blog? And, by the way, even experienced people are dummies because they do/don't do [testing|agile|documenting|coding|time management|getting things done] that I/we do/did at ACME corp. Don't believe me? Google 'great programmer' and peruse the 75 million results and ask yourself why it's such a popular topic.
- georgemcbay 15y agoI have to object to your post because you're arguing against some general situation which does not apply here. Charles Bloom is a great programmer. I've seen his code. http://www.cbloom.com/3d/galaxy4.zip http://www.cbloom.com/3d/galaxy4.zip http://www.cbloom.com/misc/index.html http://www.cbloom.com/misc/index.html etc. Also FWIW he was the lead programmer at Oddworld on games such as Oddworld: Stranger's Wrath, which while not particularly well-known to the mainstream is one of the greatest modern console games ever made and which was also very technically impressive at the time of its release. He's also kind of a big deal in the compression world. If you want to argue specific points he's made, bring them up and debate them on the merits, but don't handwave him away like he's one of those kids just learning Ruby who decided to put up a blog to show everyone how smart he is.
- skeptical 15y agoI disagree. It doesn't mater how much credibility the author has, if subjective matters are presented as facts because the author puts himself in a position of unquestionable knowledge, a reader may very well argue that this is pretentious and has zero value. Know, for many people, the author has enough credibility to write like this because they know his work. If you're one of those persons then you should read and take the author's word. But it still pretentious. Just because someone 'has the' to be pretentious doesn't mean that he/she won't be. But most importantly, why would you care about those opposing this article?
- rickmb 15y agoYou take that attitude to almost any other job, and you'll quickly will be told to leave. The joy of being a professional, well paid developer is in creating the product, not the code. The joy of programming for programming's sake is something you do in your own time. Sure, any smart company will reserve work time for that, but not in the middle of building a product. Same goes for the "healthy" opposition of a producer. If you need to be managed like that, please fuck off back to the playground, and don't dare call yourself "mature". Most of this article reflects a "we are such special an unique snowflakes, we don't need to take responsibility for the consequences of our actions" that has become all too common in our business. I'm all for spending truckloads of money on getting programmers the best tools and work-environment with all the nice toys, and giving them all the freedom in the world to do their job in any way they are most comfortable with. But the one thing I expect from them in return is to take responsibility for delivering results. Not to fuck around and be creative and "artistic" at the expense of those who are signing their paychecks.
- einhverfr 15y agoHere's the thing: Thinking through design criteria, trying to perfect them, asking all these small questions can be a joyful, creative act in itself. I think it's great when good developers can engage in heated debate as to which is the most solid design, backing away from the desire to be buzzword compliant and come up with a solid design. In the end, I'd rather write code people looked at and said "That's elegant" than code that people looked at and said "that's clever." This being said, if you don't realize that all of this is a creative endeavor then things will be formalized to the point of killing that creative spark. I do think coding standards exist for a reason, but also that they should be no longer than necessary. Indeed, one issue with writing long coding standards is that usually they are a form of premature optimization ;-)
- jblow 15y agoThe irony of your reply is that this is probably what he would have said (or anyone else writing this blog entry) 10 years ago. The point of view he is writing from is 10 years later... I am not explicitly saying that you would for sure agree with him 10 years from now, but I want to at least suggest it's a possibility. For what it's worth, I run a software company, in which I sign paychecks, and I think what is said in this posting is pretty smart.
- apaitch 15y agoI would like to think that there's a happy medium between these extremes, especially considering that cleverness is not necessarily equal to incomprehensibility. Choosing the best tool for the job and writing clean code can be just as satisfying as writing clever code, and the two are not self-exclusive. I think one can take joy in writing quality software - one that works, one that does its job, and one that other people can understand and extend.
- j_baker 15y agoI think that was actually his point.
- wwweston 15y agoLots of negative reactions here, some of which might be coming from extrapolation. I'm reading his main points as: 1) Enthusiasm can be as important to productivity as adherence to "best practices." Doing something fun/interesting feeds enthusiasm. 2) It can be helpful to have someone else taking on the cognitive load of managing the project. 3 & 4) Offloading decisions to conventions and heuristics can also reduce your cognitive load, even when you're an expert who knows when/why to depart from them. Still seem controversial?
- akkartik 15y agoThe first comment is teh awesome. http://cbloomrants.blogspot.com/2011/11/11-22-11-mature-programmer.html?showComment=1322119268519#c1769436585410313740 http://cbloomrants.blogspot.com/2011/11/11-22-11-mature-prog...
- epo 15y agoThat may have been fun for him to write, it wasn't fun to read. Given his attitude, I wonder if the same could be said of his code.
- skeptical 15y agoI agree with some of his points, with others not so much. I have myself to blame by following a link with such a title. This kind of writing is too pretentious for my taste. Everyone wants to have their own blub programmer blog entry. I do not like that attitude, from the beginning the author puts himself in a position of almost absolute knowledge, entitling him to point out other people's defects almost as facts. I would much prefer an exposure of a practical example in reasonable detail so we all can clearly see such problem instead of the usual "the [insert adjective] programmer often does this mistake".
- wwkeyboard 15y agoAnd yet again a 10 year old article[1] from Spolsky captures most of the rants in both the post and the comments. What works for a game developer does not necessarily work for an internal cooperate developer. [1] http://www.joelonsoftware.com/articles/FiveWorlds.html http://www.joelonsoftware.com/articles/FiveWorlds.html
- JabavuAdams 15y agoFantastic article! I'd forgotten about that one.
- Joeri 15y agoI would say that the mature programmer has learned that there is only one priority, UX, and that code must be built in the way that helps the user most. Depending on the use case, it can be pretty or ugly, fun or boring, oo or procedural. Sometimes the best choice is even to refuse to write a piece of code at all. Sometimes the best solution doesn't involve a computer.