TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

The Case for Slow Programming

865 pointsby bufoover 10 years ago

71 comments

wellpastover 10 years ago
I largely agree w&#x2F; the argument here, but &quot;slow&quot; is going to be self-defeating nomenclature, and is also inaccurate. Business doesn&#x27;t want slow. So if we&#x27;re pitching slow, we&#x27;re setting ourselves up to lose and the speed-hackers are going to win.<p>Our goal is architectural soundness. I believe the biggest fallacy of our industry is we think the only way to get these is to go &quot;slow&quot;. Not true.<p>What we&#x27;re really saying is our industry is short on <i>skill sets</i>. With specific skill sets, you can build architecturally sound systems at no extra cost.<p>If I were to build a house today it would take me much longer than someone else because I don&#x27;t have the necessary skills. I might hurry in which case the house would be shoddy. Is the shoddiness of the house <i>necessarily</i> because I hurried? No. It&#x27;s because I didn&#x27;t acquire the required skill sets first.<p>The software industry has no such (practical) concept of the skill sets required to build architecturally sound systems. We have a bunch of well-meaning hackers, and as a result shoddy systems that decay into technical liabilities.<p>Our industry needs to solve this skill set problem. The challenge is that academia has a hard time teaching these skill sets, because they are so removed from the practitioner. And businesses can&#x27;t teach it b&#x2F;c it takes years and special experience to actually teach it. So it&#x27;s not advantageous to a business to teach those skill sets.<p>So how do we do it? And how do we organize an industry around <i>professionals</i> who know how to build architecturally sound systems and code? This is a very difficult problem for a world that has such high demand for code and such little understanding of what the professional skill set would afford them.
评论 #8684441 未加载
评论 #8685392 未加载
评论 #8684540 未加载
评论 #8685028 未加载
评论 #8685027 未加载
评论 #8686150 未加载
评论 #8687760 未加载
评论 #8684770 未加载
评论 #8684348 未加载
评论 #8684312 未加载
评论 #8688287 未加载
评论 #8687078 未加载
评论 #8685819 未加载
评论 #8684537 未加载
评论 #8684495 未加载
评论 #8684410 未加载
评论 #8684862 未加载
评论 #8685358 未加载
评论 #8685710 未加载
评论 #8685282 未加载
评论 #8686816 未加载
评论 #8685978 未加载
评论 #8685162 未加载
评论 #8685104 未加载
评论 #8684788 未加载
评论 #8688442 未加载
评论 #8684392 未加载
评论 #8685427 未加载
donatjover 10 years ago
I was once a &quot;fast&quot; developer, like thousands of lines a day. I could knock things out at an amazing pace but they always had problems and were rarely testable. That actually worked out OK where I was where we basically built things and ideally never touched them again.<p>Now, 8 years later I write maybe 50-100 lines a day. I can see all the vectors of things that would go wrong and take the time to mitigate them. I work with &quot;hotshot&quot; young developers who write my old maybe a thousand+ a day. I&#x27;m the grumbly old man in code reviews who forces them to break them into multiple smaller pull requests. The difference is my 100 lines will stay in the codebase for years, whereas their thousand will likely be rewritten several times over in the lifetime of my code. There&#x27;s tradeoffs here, to be certain.<p>I see so many younger devs thinking just because their code is tested that its &quot;good&quot;. This is certainly not the case. There is so often so little consideration of how their code fits into the &quot;big picture&quot;. We end up with 5+ &quot;widgets&quot; where one general widget would have sufficed if they&#x27;d thought things out ahead of time. <i>Sigh</i>. <i>Shakes Fist</i>. Get off my lawn. Old man grumbles... I&#x27;m 28.
评论 #8686956 未加载
Spearchuckerover 10 years ago
This guy speaks to my <i>soul</i>.<p>A couple years ago I worked on a project that tried to put a 40+ page printed form online. The form is complex. The form has a lot of intricate guidance and notes, and sections that must or must not be completed based on previous sections or fields.<p>I threw together a form builder by re-purposing old code from a side project that took me two years to polish. My proof of concept let an admin change guidance on the fly, without touching HTML. Fields could be re-sequenced, data types changed. Business rules could be linked to fields dynamically, and applied to single fields or entire form sections. Data was saved to a SQL Server (already in wide use in the estate). My proof of concept took 4 weeks, and on the basis of that I estimated a 6 month project. When I presented the idea it was viewed as being too complex, and therefore too risky.<p>So the dev team just started hacking it out, field by field, and saving the whole form into Mongo as a single, nested document. Guidance was hard-coded into the HTML. It was fast, and at the start everyone was awed.<p>Of course soon after the customer decided that the guidance for the printed form wasn&#x27;t appropriate for the online version. And of course the customer wanted to analyse data across all forms. What was a 6 month piece of work took <i>3 years</i>. And still no ability to analyse data nested in Mongo documents. Any change requires hours of re-work, regression tests and sign-off.<p>All because agile.<p>In my 20&#x27;s I&#x27;d have been emotionally destroyed. Ego like an aeroplane into the side of a mountain. No survivors, call of the search. Happily I&#x27;m in my mid-40&#x27;s. I know better, and I know better than challenging an inexperienced project lead that has too much authority. So I move on. There&#x27;s always a project that&#x27;s more suited to my style of work (slow).
评论 #8685532 未加载
评论 #8687940 未加载
评论 #8686631 未加载
评论 #8686601 未加载
评论 #8685410 未加载
cesarbsover 10 years ago
&gt; Fast programmers build hacky tools to get around the hacky tools that they built to get around the hacky tools that they built to help them code.<p>This resonates so much with me. Sometimes I worry that I&#x27;m falling behind on keeping up with technology, but whenever I try to learn something new it seems like I have to install a package manager, then another package manager inside the first one, then pull a million other tools and libraries and frameworks before I can even begin doing something with this stuff I&#x27;m trying to learn. No, thanks.<p>I love computers, I love computing, I love thinking about solving problems using computers, but I hate the direction things seem to be taking. I&#x27;m seriously considering a career change in the immediate future because all this crazy tooling truly burns me out.
评论 #8684679 未加载
评论 #8684827 未加载
评论 #8684542 未加载
评论 #8684676 未加载
评论 #8684809 未加载
评论 #8684886 未加载
评论 #8685129 未加载
err4ntover 10 years ago
&gt; My wife often comes out into the yard and asks me: “are you coding?” Often my answer is “yes”.<p>I think I need this quote in my kitchen! My girlfriend often pounces be with the accusation &quot;YOU&#x27;RE NOT WORKING&quot; if she sees me out of my chair moving around, doing mindless house chores or half-vacantly tossing a cat toy around the house, or running errands, but the reality of _design_ is that it happens all day. And when you&#x27;re done &#x27;work&#x27; for the day, ideas and solutions still happen.<p>I&#x27;m working in the shower, I&#x27;m working all evening. I&#x27;m working waiting for the bus. I can either let it pass or write it down, but I can&#x27;t seem to shut it off.<p>But I don&#x27;t mind. I&#x27;ve been learning to slow down too. I used to be a perfectionist and when I was billing a client I would only bill my butt-in-chair-and-head-down time as billable hours, but lately I realize if I sit and think, plan, and research for 2-4 hours, and spend 2-4 hours implementing the results of that thinking, I get more done each day than 8 hours of butt-in-chair-head-down typing.<p>They key is to approach it as design, and that&#x27;s where my training as a graphic designer comes in handy. The Design Process was drilled into out heads and I&#x27;ve only recently been applying it to my coding :)
评论 #8688320 未加载
评论 #8686002 未加载
评论 #8689138 未加载
serve_yayover 10 years ago
&gt; The casualty of my being a slow programmer among fast programmers was a form of dysrhythmia – whereby my coding rhythm got aliased out of existence by the pummeling of other coders’ machine gun iterations. My programming style is defined by organic arcs of different sizes and timescales...<p>Boy oh boy. Look, I&#x27;m all for coding slow, taking time and understanding what you&#x27;re doing. But there is something to be said for &quot;playing well with others&quot;. We&#x27;re all trying to make things, not be the backdrop for your exquisitely-crafted sense of craft.<p>To me that reads a lot like &quot;I would have done something really good if I weren&#x27;t surrounded by those philistines&quot;. Well, maybe so, but you are surrounded by them. So choosing a method of working that does not result in &quot;dysrhythmia&quot; or whatever strikes me as rather prudent.
评论 #8684263 未加载
评论 #8685507 未加载
评论 #8684414 未加载
评论 #8684490 未加载
m0nasticover 10 years ago
I hesitate to recommend my process to other people, because I don&#x27;t think I&#x27;m a very good programmer.<p>But for the past year or so, I find that I program best by actually writing out my program in a notebook (in my case a quad-ruled lab notebook). I don&#x27;t even start typing until I have it laid out pretty much in it&#x27;s entirety on paper.<p>This sounds ridiculous (and I can imagine it&#x27;s not practical for all types of programming), but I&#x27;ve found that it&#x27;s been tremendously helpful in getting me to understand what all the code that I&#x27;m writing does.<p>Most of the code I&#x27;ve written this past year has been in Haskell, so that helps somewhat by not having a lot of syntax to write down, but I&#x27;m sure I&#x27;d be doing the same thing even if I was writing in Java.
评论 #8685393 未加载
评论 #8685841 未加载
评论 #8684951 未加载
评论 #8684796 未加载
评论 #8684614 未加载
评论 #8687433 未加载
评论 #8685299 未加载
评论 #8685544 未加载
dansingermanover 10 years ago
You get shitty fast programmers and shitty slow programmers. You get good fast programmers and good slow programmers too.<p>&#x27;Fast&#x27; or &#x27;slow&#x27; in isolation are not really a measure of anything valuable, except perhaps how an individual fits into the team culture.<p>The crucial thing to measure is how long it takes to get to good, robust software that does what it needs to do.<p>There are many strategies to achieve that (agile or big design up front or others) but software engineering as a medium is too immature to have found the one true way (maybe there will never be a one true way). Up front design and emergent design have both succeeded and failed on many occasions.<p>This post reads to me as someone who doesn&#x27;t like working with younger teams as the work style often doesn&#x27;t fit, and therefore concludes the team&#x27;s working style is wrong, rather than he just subjectively doesn&#x27;t like it.<p>Most of this thread sounds the same to me too.<p>Maybe the benefit of a fast programmer is it is quicker to find out if they are shitty?<p>I&#x27;m 42 and consider myself fast-ish FWIW.
评论 #8688855 未加载
JackFrover 10 years ago
He makes a reasonable point, but this piece is largely a strawman. And<p>&gt; For the same reason that many neuroscientists now believe that the fluid-like flow of neuronal firing throughout the brain has a temporal reverberation which has everything to do with thought and consciousness, good design takes time.<p>is just pure nonsense.
评论 #8684999 未加载
评论 #8684575 未加载
评论 #8684836 未加载
elwellover 10 years ago
&gt; &quot;I’m Glad I’m not a Touch-Typist.&quot;<p>Yes, typing speed, when looked at in isolation, does not <i>cause</i> the production of high-quality code. But there is an argument to be made for reducing the friction between one&#x27;s mind and the code on the screen. Insofar as we can ignore that transference of data from biology to technology, we can think more fully and clearly. So, emacs commands that are fully ingrained in one&#x27;s subconscious may be good, but probably not the C-u 12 C-x TAB; at least for somebody simple like me.
评论 #8684315 未加载
评论 #8684281 未加载
评论 #8685534 未加载
评论 #8684252 未加载
elwellover 10 years ago
Brings to mind Rich Hickey&#x27;s support of so-called &quot;Hammock Driven Development&quot;: <a href="https://www.youtube.com/watch?v=f84n5oFoZBc" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=f84n5oFoZBc</a>
larrysover 10 years ago
&quot;I’m Glad I’m not a Touch-Typist.&quot;<p>Have to disagree with this 100%. A touch typist can always hunt and peck if they want to or need to for some reason (would love to have a reason for this being a benefit though). Being able to touch type helps greatly with just about everything when you are using a keyboard. Sending emails, writing letters, filling out forms, coding, the command line and so on.<p>Not only that but it&#x27;s extremely easy for the average person to learn to touch type (I learned from a book and was proficient after about 3 week).<p>I really can&#x27;t think of a good reason (other than taking the time to learn which as mentioned is easy enough) to not learn to touch type. I think it&#x27;s one of the least talked about productivity boosts out there.
评论 #8685050 未加载
评论 #8686746 未加载
angersockover 10 years ago
I&#x27;ll disagree with a few points here.<p>First, I think that the key is a mindset, not an age--I&#x27;m the youngest person at my company and yet I&#x27;m consistently the one pushing for smarter, smaller, better-designed solutions to our problems. It seems that a lot of people, especially those with an academic background, forget one of the three qualities of a good programmer: extreme laziness.<p>Developers (often younger ones) that manically hop from framework to framework and sprint to sprint because design work is &quot;too slow&quot; end up expending more energy than if they&#x27;d just been lazy and really <i>thought</i> about what they wanted to accomplish before they worked on it. This is especially true in business, where that mindset is invaluable for skipping work you&#x27;d otherwise do while finding fit.<p>Second, I disagree that on a good team engineers aren&#x27;t fungible: the fact is that, if you have one person who &quot;owns&quot; a part of the code, you are inviting disaster and bad design. This, and not its converse, has been proven to me over and over the last decade. Sure, one person might have the domain expertise or familiarity with something to really nail it, but they should <i>never</i> be the only one on the team who can do so.<p>If they <i>are</i>, you slip them pizzas under the door, make them happy and productive, <i>and then sack them as soon as you can extract their knowledge for they are a liability waiting to turn into a problem</i>.<p>Third, and perhaps most controversially, the author supposes that good design is important. For almost any business, sadly, it isn&#x27;t. Nobody gives a shit when you have deadlines to meet and bills to pay--and if you&#x27;re lucky, you can push that burden up onto the next poor bastard to inherit the codebase after you&#x27;ve cashed out.<p>I really, really wanted to believe that good design mattered, that somehow it had intrinsic value. Sad thing is, it doesn&#x27;t. BeOS failed. Plan9 failed. Inferno failed. Transmeta failed. Sun and SGI failed. Smalltalk failed. Lisp failed. Erlang failed (and cleverly stood back up, but not because the majority knew or cared about design).
评论 #8685029 未加载
评论 #8686621 未加载
评论 #8685148 未加载
评论 #8685120 未加载
leeberover 10 years ago
I probably spend just as much or more time sitting, thinking, and staring at partially written code, than I do actually writing the code. It&#x27;s frustrating when you have superiors who don&#x27;t understand that time spent <i>thinking</i> is just as productive as time spent typing.<p>That&#x27;s just my personal style, although I&#x27;ve never worked in &quot;large&quot; teams on a single codebase so can&#x27;t comment on what styles work best in those situations.
评论 #8684424 未加载
BhavdeepSethiover 10 years ago
And yet, most coding rounds in interviews are rigorously timed. Almost always, the importance is given to code completeness rather than code design&#x2F;elegance. I&#x27;m sure a lot of talented engineers lose out here.
评论 #8684214 未加载
评论 #8684711 未加载
评论 #8685322 未加载
评论 #8684238 未加载
cxsevenover 10 years ago
John Draper, AKA Cap&#x27;n Crunch, made a great case for it: &quot;It was a perfect coding environment, coding in jail. [...] Those long nights without the computer really got my smarts in top gear, as I really focused in getting the code perfect and bug free. Not having a computer some of the time, got me to thinking more about writing good code, and less time debugging. During this time, I wrote a really cool FORTH debugger that allowed single stepping through FORTH code (Totally unheard of in those days).<p>I also write a De-compiler that would take the compiled FORTH code and re-generate source code. This was invaluable in tracing down some gnarly compiler problems in FORTH. You see, I was not only writing a word processor, but I was also developing the language on the fly as well. Modifying the compiler, interpreter, and I even write a DOS (In forth) to manage the easyWriter text files, because EasyWriter didn&#x27;t need DOS. So I implemented one, using a FAT (File allocation table) and all that other Gnarly Disk Operating system low level code. I found out that FORTH allowed me total flexibility. If the language didn&#x27;t have a feature, I implemented it. Simple as that.<p>The day finally came when I was to be released from jail, and Matt had already rented a fully furnished apartment in West Berkeley for me, and met me at the jail when I was released. That evening, we met at the IHOP on University Ave to sign the contract YAY!! and the incorporation papers YAY! Now we can call ourselves Cap&#x27;n Software Inc. We rented office space on Telegraph avenue a block from the UC Berkeley campus and called it our &quot;Corporate Headquarters&quot;.<p>Soon we got our first royalty check of $3500, and I gave Matt $1000 of it and put him on a salary. Michelle, Matt&#x27;s roommate and holistic friend was hired on as our Secretary, and handled all of our bookkeeping. WOW!! I get out of jail and in 24 hours, am president of my very own software company. SUPER COOL!!&quot; <a href="http://www.webcrunchers.com/crunch/Play/ibmstory/" rel="nofollow">http:&#x2F;&#x2F;www.webcrunchers.com&#x2F;crunch&#x2F;Play&#x2F;ibmstory&#x2F;</a>
PythonicAlphaover 10 years ago
The best solutions don&#x27;t come from hacking, but by grasping the problem and it&#x27;s full scope, the chance raises that you find a solution that can not only be used for the current problem, but also for similar other problems. A good programmer always tries to find similarities and to reuse old solutions in as many other areas as possible, but not more.<p>Such a behavior also boosts the maintainability of the solution. On the other hand, when it is ignored, a solution quickly can become unmaintainable and the solution that was implemented so &quot;quickly&quot; can become a black hole of man power.<p>I personally experienced more than one project, where the source code has become in very short time so complex and so bug ridden, that development times literally exploded.
ludooover 10 years ago
Very well put. I have a similar (slightly younger) age, and often pose myself the same set of questions on speed, tooling, typing. Needless to say, my answers are very similar to yours.<p>As for the Design Process, it works in the exact same way you describe in other fields like Architecture, which I studied and practiced ages ago at a more than decent level.<p>Money (VCs&#x27;), the myth of the young billionaire, and a few other things are probably what make developing different.
bkoover 10 years ago
This article reminded me of something I read in the Vanity Fair article about Sergey Aleynikov, the Goldman programmer[0].<p>&gt;He’d been surprised to find that in at least one way he fit in: more than half the programmers at Goldman were Russians. Russians had a reputation for being the best programmers on Wall Street, and Serge thought he knew why: they had been forced to learn programming without the luxury of endless computer time. “In Russia, time on the computer was measured in minutes,” he says. “When you write a program, you are given a tiny time slot to make it work. Consequently we learned to write the code in a way that minimized the amount of debugging. And so you had to think about it a lot before you committed it to paper. . . . The ready availability of computer time creates this mode of working where you just have an idea and type it and maybe erase it 10 times. Good Russian programmers, they tend to have had that one experience at some time in the past: the experience of limited access to computer time.”<p>Even while he was in prison he managed to code:<p>&gt; A few months into Serge’s jail term Masha received a thick envelope from him. It contained roughly a hundred pages covered on both sides in Serge’s meticulous eight-point script. It was computer code—a solution to some high-frequency-trading problem. Serge was afraid if the guards found it they would deem it suspicious, and confiscate it.<p>That kind of discipline and meticulous thought is very hard to build in to someone who has never had these kinds of constraints but it is certainly an admirable goal.<p>[0] <a href="http://www.vanityfair.com/business/2013/09/michael-lewis-goldman-sachs-programmer" rel="nofollow">http:&#x2F;&#x2F;www.vanityfair.com&#x2F;business&#x2F;2013&#x2F;09&#x2F;michael-lewis-gol...</a>
评论 #8687718 未加载
overgardover 10 years ago
I kind of disagree with the premise here, from my own experience, it&#x27;s much better to work fast but ruthlessly refactor and never be afraid to delete your own code. I find I rarely nail things on my first attempt, but by being quick and failing fast, I learn more about the problem domain and I end up with a nicer end result than the person that agonized about their decisions rather than trying things out. (Of course, the corollary is that I usually do these things on a branch so I&#x27;m not inflicting it on my coworkers)<p>The problem with doing a big design up front is that you&#x27;re generally going to run into <i>something</i> that&#x27;s surprising, that you didn&#x27;t account for (unless what you&#x27;re doing isn&#x27;t novel -- but then, why are you writing code rather than reusing it?) I think when people get all ponderous about these things, they&#x27;re not really learning about the problem, they&#x27;re just procrastinating. We&#x27;re not building bridges here, if your first attempt isn&#x27;t brilliant you&#x27;re not out a million dollars of concrete.
评论 #8685102 未加载
评论 #8688470 未加载
keithnoizuover 10 years ago
The Author lost me at &quot;I&#x27;m glad I&#x27;m not a touch typist&quot;. Coding isn&#x27;t about typing at the same time when programming you should be writing code not thinking about where the semicolon is. I type and interact with my IDE incredibly rapidly. Generally my ability to type quickly is not the bottle neck. Sometimes it is. When it is I&#x27;m glad I can do it as rapidly as I can.<p>Meanwhile I agree with other comments that slow programming is the wrong word. You can rapidly write quite a bit of code with out needing to resort to hacking or avoiding best practices. It depends on your familiarity with the space and ability to properly construct the problem in terms of implementation quickly.<p>The point here is that you work at the appropriate pace and put some sense of craftsmanship into your work. I doubt that over the course of a sizeable project the approach of being diligent versus hasty is going to result in the diligent programmer tacking longer to get the same amount of work done.
maerF0x0over 10 years ago
You have decades on me and I still wish to work your way. It maybe anecdotal, but the more timepressure a codebase has been under the less i&#x27;ve liked it, roughly speaking.
n3tover 10 years ago
Speaking of touch typing, there&#x27;s a must-read [1] which made me learn and practice this skill.<p>[1] <a href="http://steve-yegge.blogspot.com/2008/09/programmings-dirtiest-little-secret.html" rel="nofollow">http:&#x2F;&#x2F;steve-yegge.blogspot.com&#x2F;2008&#x2F;09&#x2F;programmings-dirties...</a>
评论 #8684933 未加载
ThomaszKruegerover 10 years ago
A lot depends on who you are programming <i>for</i>. Usually it is for a company that places more importance on a deadline than anything else, including quality. Other &quot;ilities&quot; are even less relevant. So you just hunker down, and produces something that &quot;works&quot; very fast. For, say, a small dataset.<p>Then either the project finishes (abandoned sometimes), or it grows (exponentially sometimes), and what was created fast no longer is usable. So you do it once again, now to support the new requirements. And so on.<p>We are constantly rewriting systems, as we continuously copy data from different media. It keeps us employed. It is much easier to be remembered for doing something fast than for creating something that lasts.
realrockerover 10 years ago
Only few businesses want a well-crafted software. Today&#x27;s startups are endeavors of treasure hunts. You build a ship just good enough to hit the island. If it doesn&#x27;t work out(which in all probability it won&#x27;t) you dump the ship. If it does, you still dump the ship. There is a element of expected failure in the current enterprise of writing software which calls for and pushes people to knowingly write bad fast software. As the author says it will be faster to write slowly if the goal is to write good software. But the goal is rarely that.
Adam89over 10 years ago
How does typing speed affect the design of software?<p>Thinking about your design has not got a lot to do with the speed you type at.<p>Secondly as programmers we should be able to work on the same code base.
评论 #8684201 未加载
markbnjover 10 years ago
Also in the largely-agreed camp, and probably unsurprisingly I&#x27;m about the same age. But unlike some I don&#x27;t have a problem with the word &quot;slow.&quot; Yeah, it has negative connotations, but it&#x27;s clearly meant as an ironic counterpoint to the culture of speed. Whatever, as long as it will get the young guys I work with to figure out what the problem is before trying out a solution, I&#x27;ll be happy.
lyudmilover 10 years ago
In general I think there is a case to be made for &quot;slow&quot; programming, but this article falls short for me. I happen to think that software development is a knowable discipline, that we&#x27;re in the process of figuring out how to build the kinds of systems we need and struggling with a new kind of engineering where there are no physical constraints.<p>Therefore, I think we have a lot of exploring to do in order to come up with practices that reliably lead to better software and certainly the speed of the development process and the number of iterations is an important thing to experiment with.<p>However, the post is too wishy-washy to teach anything meaningful. What does &quot;dot my i&#x27;s and cross my t&#x27;s&quot; mean in the context of software development? What does &quot;something like implementation-ready code&quot; mean and why is it useful? How do I, as a person separate from the OP, get from where I am today as a developer to the super effective zen-master you&#x27;re telling me I could be? I&#x27;d love to read that post, because the one I just read makes it seem like I should wait to get older and take up gardening.
jroseattleover 10 years ago
IMHO....<p>This can be appropriate in certain scenarios. It royally sucks for other scenarios, though. Measure-twice, cut-once is a great development strategy. However, iterative-fast can have as many benefits as slow-and-steady.<p>Are you certain about your feature set? Must the feature be everything we can imagine when it&#x27;s released for the very first time? Are there umpteen other things that also need to be addressed in the allotted amount of time? Are you sure you&#x27;re not over-engineering a solution?<p>The biggest issue with slow-and-steady: cost and time-to-market. Of course one can argue &quot;but cost is actually lower&quot; and &quot;time-to-market for a solid product will be the same or less&quot;, but (for me) that equates to <i>any</i> iteration having zero value along the way. And for us, that&#x27;s just not true.<p>I&#x27;m default-wired to well-thought systems and architecturally sound operations. I would certainly like to deep-dive into our codebase and bring it to a beautiful state of robustful bliss. The only problem is -- I can&#x27;t afford it right now. Maybe later, but early in our lifecycle, speed is more valuable.
ncphillipsover 10 years ago
This is exactly how I work. It can seem a slower when you tell your boss you just scraped everything to start over, but it&#x27;s actually super efficient. It never takes nearly as long to rewrite an application. On my latest proejct for example, I took 1 week to think about the problem and play around with different data schemas, then I spent 3 weeks writing the program. It worked well enough, but there were a lot of holes, and it was a god damn mess to read.<p>I rewrote the entire project in two days. That&#x27;s right, what took me 3 weeks of playing around only took me 2 days the second time around, and it was well worth the effort. The refactoring increased security tremendously, and made many parts of the code so much cleaner and readable it brings a tear to my eye.<p>What&#x27;s even more important is that I was able to easily add new functionality which would have taken a lot of effort to implement because of the way things were written before. Had I left things the way they were, or tried to refactor without a complete rewrite, I would have just introduced more bugs and got really frustrated.
beatover 10 years ago
&quot;There&#x27;s never time to do it right, but there&#x27;s always time to do it over&quot;.<p>This reminds me of something I&#x27;ve been saying for a while. I&#x27;m a practitioner of TDD - Test Driven <i>Development</i>, not Test Driven Design. I like test-first coding not because it&#x27;s faster, as many proponents claim, but because it&#x27;s more comfortable and thoughtful. It forces me to slow down and think about what I&#x27;m actually doing. I don&#x27;t think I&#x27;m any faster when I&#x27;m coding to tests. I do, however, feel much safer. I hate that feeling of cranking out a bunch of code, then it breaks, and I don&#x27;t know what broke or why.<p>But good design is absolutely <i>not</i> an emergent property of the process of coding! Thoughtless coding leads to poorly structured spaghetti. Well-tested spaghetti is still spaghetti! Good design is always a matter of compromises. You can either make those compromises in a conscious and thoughtful way, or you can close your eyes and hope for the best. Good luck with that.
评论 #8686051 未加载
sytelusover 10 years ago
It&#x27;s not about being fast or slow but being in a flow. You don&#x27;t want to go faster than you can or intently slow down. Unnecessarily long design cycles inhibits experimentation and may cause you to loose touch with reality. Artificial push for speed up is probably even more harmful. So I would vote for &quot;flow movement&quot;.
EdSharkeyover 10 years ago
Lack of design in software nowadays was cited as a problem in the post. I agree, and I think there&#x27;s a lot of not-classically educated hands out there that wouldn&#x27;t know a good design document from bad. Nor would they have any practical knowledge of a combination of: how to structure code in large code bases, test their code, converse about&#x2F;apply software patterns, document their API&#x27;s for public consumption, RAII, SOLID, TDD, etc. So, I think there&#x27;s little hope for improvement in software quality&#x2F;design&#x2F;success metrics&#x2F;etc.<p>Big up-front design only satisfies document weight tests and typically does not stay up to date with the software. So, just simply saying &quot;we need more design&quot; is not going to get us anywhere but hell.<p>Self-documenting code is a nice idea, but scales only so much in a large codebase. UML is a bear to produce and maintain, and I only really like it in whiteboard discussions, not actually drawn in a tool.<p>Wikis devolve into a mess of disconnected ideas.<p>Successful teams I&#x27;ve been on tend to rally and organize designs around the already generated documentation (like JSDoc or JavaDoc), but those docs often only focus on the user-facing API&#x27;s and leave the internals as a partially documented wasteland.<p>A few teams I&#x27;ve been on had a scribe, which was sweet, but not usually.<p>What patterns of design and documentation actually work well for you in real-world, large project&#x2F;team scenarios?<p>Regarding needing an aged &quot;adult in the room&quot; to guide the fledgling developers to glory, as I think the OP suggests is an answer to the problems ... Well, in my many experiences where imparting wisdom from on-high was the goal, that has been a miserable failure. It was all because said &quot;senior architect&quot; or whatever the title was invariably only cared about blessing random big decisions randomly&#x2F;destructively and had otherwise checked out to walk his dog after lunch and otherwise coast during his pre-retirement. All I can say is, God bless &#x27;em.<p>I do NOT count on age as a factor, only that a developer has reached a certain point of experience in their career. What I DO count on is one person who can enforce a clear vision with passion. Who holds the torch for your team? Is their grip shaky or firm? Where are we headed? Are we headed there with conviction? Does the end goal still seem plausible to all hands after every step we take? If you have proven you&#x27;ve got the chops and can back up all your assertions with creditable past successes and&#x2F;or literature, you can rule your team and demand excellence - YOUR excellence! Pick a darn direction and let&#x27;s go! I have total respect for that someone that has a coherent vision AND can communicate it.<p>Agile methodologies sound plausible to address design and software productivity issues, but I have yet to see exceptional results from an agile project vs waterfall. This is probably just because software is a hard thing to do well in any case, and is subject to political winds, funding, ineffective product owner, etc.
评论 #8685463 未加载
评论 #8685296 未加载
tobycover 10 years ago
I definitely see the value in taking the time to design things correctly and making sure you&#x27;re evaluating all angles — I&#x27;m not sure if it&#x27;s 100% necessary to say that to do that you always need to be slow though.<p>I think the difference between a fast programmer and a slow programmer often isn&#x27;t that the slow one is methodically designing and making everything perfect, it&#x27;s that the slow one has so many more inefficiencies in their workflow.<p>A good and fast programmer generally knows their tools inside and out, and they&#x27;re willing to learn new tools when they need to (and not dismiss them because their current setup works good enough and it&#x27;s what they know).<p>Speed isn&#x27;t an indicator of good or bad quality. I would say that both mastery and improvement of tool is more of an indicator.
oldpondover 10 years ago
One of the key points in the article is that the OP had lots of experience with Bay area startups. This could be part of their culture. If you use agile you can achieve a code velocity a touch higher than standard, and if you really want to push the limits you can. I agree, however, that good design takes time. I was at a conference in Sweden last year, and the conference App was a bit problematic. The poor dev team was chained to their keyboards right in the middle of the breakout area trying to fix it in real time. I felt like saying, &quot;Guys, it failed, go enjoy the conference.&quot;<p>My experience lately in &quot;normal&quot; shops (non startup) is that the skills sets are just plain missing. It&#x27;s hard to find anyone that can code at all, let alone code fast.<p>Good post. Thanks for this.
kentpalmerover 10 years ago
Software Craftsmanship Vision See <a href="http://kp0.me/SoftCraft" rel="nofollow">http:&#x2F;&#x2F;kp0.me&#x2F;SoftCraft</a><p>The problem is that Software is in fact a new kind of object, i.e. it has a different ontology from most other objects which is defined by what is called Hyper Being by Merleau-Ponty and Differance by Derrida. This is in contradistinction to most objects which are either Pure Being (present-at-hand) or Process Being (ready-to-hand). Hyper Being objects are defined by Derrida in terms of differing and deferring, but we can talk about instead decoherence and delocalization of Software. Delocalization has to do with the fact that design elements are spread out within programs and in spite of object oriented design are not self-contained at the program level. Decoherence has to do with the fact that programs lack internal coherence intrinsically due to the nature of general purpose programming languages and their multi-paradigm nature and the solution to this is aspect oriented programming which attempts to render coherent elements that are non-localizable. But neither aspect oriented programming nor object oriented programming completely solve the problem of the intrinsic quantum like properties that occur in software. Software designs are like classical physics in relation to the quantum like nature of software. See my original paper on this called Software Ontology at <a href="http://kp0.me/SoftOntos" rel="nofollow">http:&#x2F;&#x2F;kp0.me&#x2F;SoftOntos</a>. There are in fact various ontological levels identified in Continental Philosophy and beyond Hyper Being is Wild Being and Ultra Being which both have implications for our understanding of Software.<p>Also I don&#x27;t see any reference to Fast and Slow Thinking by Daniel Kahneman. There is some basis for understanding the difference between Fast Thinking and Slow Thinking in his work. Fast Thinking makes up narratives on the fly while Slow Thinking creates arguments more ponderously. Actually in Software Craftsmanship we need both and we need to balance these two forces in the patterning of our development processes.<p>Kent Palmer <a href="http://kdp.me" rel="nofollow">http:&#x2F;&#x2F;kdp.me</a>
paul7986over 10 years ago
To all the web agencies who expect jobs (design, code it &amp; WordPress it with custom post types) a mid-size website; 20 to 40 pages) that take 60 hours to be completed in two to three days (pay you for 24 hours of work only) you can go take a flying leap.<p>This industry especially in the web agency world has me burnt out. The agencies all are in competition with each other .. lowering costs and thus expect their people to get things done in manner where their employees have no life but getting their work done. It&#x27;s exhausting and the work is not very fulfilling.<p>Now I have done the same work at Fortune 500 companies and for someone with a family and who wants a balance work &amp; family&#x2F;social life that is where you want to be!
Arzhover 10 years ago
&gt; And the latest clever development tools, no matter how clever, cannot replace the best practices and real-life collaboration that built cathedrals, railroads, and feature-length films<p>There is really one design process with all of the great cathedrals, railroads and films. One person is designing and running the show. It really just reads like this guys doesn&#x27;t like to work with people who like to work by committing a lot. I work with a programmer that is in his late 50s and he likes to work as the writer does. I can get his same level of results with my method, which is much &#x27;faster.&#x27; It&#x27;s not that I am much smarter than him we just have different ways of doing it and we get the same success rate.
pauldpriceover 10 years ago
Glad he doesn&#x27;t touch type? What a lame excuse for not mastering the tools of his trade! That&#x27;s like a carpenter saying he&#x27;s glad he never properly learned to use a hammer. There is a time and place for a steady pace and thorough design process, but not in the early stages of a startup. If you can&#x27;t keep up with your user&#x27;s feedback and market demands then you&#x27;ll lose to a scrappy team that can, no matter how beautiful and elegant your code. 95% of software startups that become wildly successful were built on an initial base of excrutiatingly ugly code. Gold plating code for a business that is bound to change directions is a great way to ensure failure.
评论 #8685842 未加载
chillingeffectover 10 years ago
Great intent, but modulating speed is only one of several important vectors toward good code architecture.<p>I would add planning out on paper, in (small) groups. Also, reviewing designs, objects, protocols, schema, etc., before writing code. The author mentions thinking while gardening, but that doesn&#x27;t share with others. Also, planning for the future, for maintenance, debugability, verification, validation, for re-use, for modularity, for upgraded hardware and in some cases regulatory, etc. And developing documentation before, during and after coding.<p>So yeah, sneaky trick to get us all to talk about our best practices by hyperfocusing on speed :)
pzxcover 10 years ago
I recently disregarded the competence of a coworker (who is in a programmer position) because I took a class with them and saw that they could not type. They were hunting and pecking. (This guy is 50 years old so has had plenty of time to learn)<p>Is that wrong? Does being bad at typing force you to be more thoughtful and actually make you a better programmer? Or does it just mean it takes you longer?<p>My thinking is that you are not doing much thinking while you are actually typing, so not being able to type proficiently just means you&#x27;re slower and that&#x27;s it. So all else being equal, a programmer that can&#x27;t type well is a red flag.
评论 #8684985 未加载
评论 #8684415 未加载
评论 #8684413 未加载
评论 #8685788 未加载
评论 #8685789 未加载
kendallparkover 10 years ago
I feel like &quot;agile&quot; has come to mean &quot;get shit done fast&quot; in today&#x27;s programmer culture. But just as &quot;agility&quot; and &quot;speed&quot; are not the same, agile development does not necessitate a race to the finish and similarly is not the antithesis of the slow programming style (as some commenters seem to be suggesting).<p>I think people have wrongly used agile as an excuse to implement first, reflect later, refactor never. In the original agile movement, there is a lot of time devoted to refactoring. You hack something together that accomplishes your goal. You get to see how it&#x27;s working, get user testing up and running, and then reflect. But underneath the hood the program is a complete mess. This is the time for an agile developer to go back and majorly refactor the program into a neat, well-organized system. Maybe even rewrite. The problem is people on the business side of things see a near-complete project that they want to launch ASAP. It may even feel that way to the developers. I think the refactor part of the process gets cut short because of the desire to push the product out the door or work on new feature sets. You&#x27;re only doing half the agile process in this case.<p>I&#x27;m definitely not in the &quot;plan first, build later&quot; vein of thought. It&#x27;s not how I program or do artwork (I&#x27;m a hobby artist as well). I need time to play around and experiment with different ideas in real-life implementations before settling on my plan of attack. There are so many ideas that may seem great in your head, but don&#x27;t do well IRL. Additionally, you may stumble upon a new idea in the process of experimenting.<p>The thing I long for the most as a programmer is more time to refactor. Time to refine my code. There is something to be said about craftsmanship as opposed to mere production. One thing I&#x27;ve enjoyed about my own personal programming projects outside of work is that I have time to sit back and reflect. Is this the best way of modeling X? Is there a more simple way of expressing X? And then I can do major refactors&#x2F;rewrites that would never fit into a sprint at my workplace. But I do believe the investment will pay off in the future when it comes to maintenance. And extra day refactoring now could save weeks of debugging later on.
aoakenfoover 10 years ago
A flurry of hacks tends to beat the &quot;correctly designed&quot; way: <a href="http://www.jwz.org/doc/worse-is-better.html" rel="nofollow">http:&#x2F;&#x2F;www.jwz.org&#x2F;doc&#x2F;worse-is-better.html</a>
评论 #8708989 未加载
评论 #8686650 未加载
UK-ALover 10 years ago
The main issue are not the developers. In my experience its the pressure the company puts developers under. Most developers would love to take time develop well designed software. But most companies push, push, push for more features in x time. The first thing that gets cut is design discusion and the ability to go back and improve old code.<p>The older the developer, the harder they are to push around(They&#x27;ve seen it all before, probably been a manager before) and probably why we have a agist industry because companies like developers they are easy to manipulate.
jaunkstover 10 years ago
Speed, is a constant demand. The rate that we are creating new frameworks, languages and platforms is an all time high. We toss them away as quick as we build them, by the time its reaching mainstream adoption we are refactoring the core, and expecting developers to adopt the changes before they master the first mature iteration. Born to die software is here and its going to cause a massive fracturing. If we adopt reverse compatiblity maybe we can offset the repercussions. I expect my code to start to deprecate in atleast 6 months in some manner.
danenaniaover 10 years ago
While it&#x27;s true that most nontechnical managers over-prioritize speed and underestimate the dangers of technical debt, it&#x27;s also true that many otherwise great engineers are inclined toward premature optimization and tend to lose track of business goals.<p>In most contexts, an engineer that understands both when solid, thoughtful, slow engineering is appropriate and when it&#x27;s NOT is worth immeasurably more than an engineer whose only gear is extreme rigor.
lonelybugover 10 years ago
I don&#x27;t understand why so many software developers&#x2F;engineers believe engineering without design is a good practice.<p>Maybe you should read this article <a href="http://martinfowler.com/articles/designDead.html" rel="nofollow">http:&#x2F;&#x2F;martinfowler.com&#x2F;articles&#x2F;designDead.html</a>.<p>Martin fowler is one of the people draft the manifesto for agile software development.<p>If you still call yourself software engineer, then, remember agile != no design.
tallesover 10 years ago
He uses a picture from here in the article: <a href="http://designapplause.com/2012/infographics-the-variables-within-design-process/31329/" rel="nofollow">http:&#x2F;&#x2F;designapplause.com&#x2F;2012&#x2F;infographics-the-variables-wi...</a><p>It&#x27;s such a beautiful infographic, but I couldn&#x27;t interpret it... anyone knows it those are based on real data?
chandankumarover 10 years ago
IMHO, writing a good program goes through lot of thought process. You keep thinking about the solution of same problem till you get the best solution (or at least you are satisfied with it). So it is going to take some time. But I guess after having some experience, you will find a way to create well designed code more quickly than before.
sceleratover 10 years ago
One of the first things I learned about programming was to write the problem down on paper. Diagram it. Don&#x27;t even start coding until you have a good map of where you&#x27;re going, at least at couple levels of detail.<p>Most of the problems I&#x27;ve encountered myself or seen with others is directly related to coding too soon.
meesterdudeover 10 years ago
wow, this is great! I definitely have always fallen into the &quot;slow&quot; camp. Though I&#x27;ve always considered it more a matter of being careful and with purpose, and not being haphazard.<p>Quality over quantity. Painting a wall is easy, painting a painting takes much more precision and care, especially when you have to exercise your design skills as a developer.<p>Though often, a lot of the time goes into understanding what it&#x27;s supposed to be doing in the first place, and from there it&#x27;s a matter of making it more resilient, isolated and friendlier to work with.<p>I&#x27;m the slowest dev on my team, but I squash the bugs that nobody could figure out, or knew were there. Taking things apart takes time and patience, but when you&#x27;re done you know how it all works and can refactor it to be clearer&#x2F;simpler, and appropriately comment on what it does and how.
seanconatyover 10 years ago
I like iterative development but I also really like the author&#x27;s &quot;cauldron of soup&quot; metaphor. I&#x27;ve definitely worked on projects where I feel like I&#x27;m rebasing&#x2F;updating more than I&#x27;m actually doing work to add any type of new value.
mattxxxover 10 years ago
I&#x27;m all for programming slowly, but how many pieces of code are built slowly, and, in the end, turn out to be built wrong or cumbersomely?<p>It seems like, if you write slowly, you gotta have legitimate deliverables and tests at every step.
评论 #8685849 未加载
atjoslinover 10 years ago
My thoughts on this article:<p>&quot;Yes, new software and new businesses need to grow. But to be sustainable, they need to grow slowly and with loving care. Like good wine. Like a baby.&quot;<p>Why can&#x27;t I grow quickly &quot;and with loving care&quot;? :-)
edpichlerover 10 years ago
Really liked this part: &quot; And the latest clever development tools, no matter how clever, cannot replace the best practices and real-life collaboration that built cathedrals, railroads, and feature-length films.&quot;
评论 #8686962 未加载
monokromeover 10 years ago
This is a good article, and the constant need to code bigger bowls of spaghetti faster is definitely a problem. However, I think that it&#x27;s a stretch to imply that only older engineers do this.
ThinkBeatover 10 years ago
I think it is sad that so much of the discussion here is about the name. The focus is upon marketing not on the substance of the article &#x2F; blog post.
lifeisstillgoodover 10 years ago
Thank god - there are others out there speaking my language. The ideas of dysrythmia are spot on.<p>Totally fantastic - an insight well put. Thank you
msolujicover 10 years ago
here is one little pearl<p>The sooner you start to code, the longer the program will take. Roy Carlson Anon. University of Wisconsin<p>Taken from BUMPER-STICKER CS <a href="http://www.bowdoin.edu/~ltoma/teaching/cs340/spring05/coursestuff/Bentley_BumperSticker.pdf" rel="nofollow">http:&#x2F;&#x2F;www.bowdoin.edu&#x2F;~ltoma&#x2F;teaching&#x2F;cs340&#x2F;spring05&#x2F;course...</a>
crispweedover 10 years ago
&#x27;Slow programming&#x27; has too many syllables, and you end up having to say it fast. Let&#x27;s call it slooowgramming.
aabeshouover 10 years ago
What&#x27;s with describing his friend as a &quot;mature, female software engineer&quot;? That strike anyone else as weird?
bitwizeover 10 years ago
Here are my Reddit comments on this story:<p>I&#x27;ve always programmed thus:<p>* Try to assimilate a mental model of the bit I&#x27;m working on, and as much of that bit&#x27;s dependencies as is practical, into my head. This may involve fiddling with the code and seeing how it breaks when I do certain things to it, or hammering at it inside a REPL or similar. The bit that I&#x27;m concerned about could be a single method, but is usually larger.<p>* Try to develop a mental model of the bit as it _should_ be. Do a diff between the &#x27;is&#x27; and &#x27;ought&#x27;, make code changes as necessary, fiddle with the new code to make sure the shape of its function is roughly the &#x27;ought&#x27; shape.<p>* Update the unit tests with specific tests for the &#x27;ought&#x27; case, run tests, fix failures.<p>* Check in or submit code for review.<p>This is not how software is written now. How software is written now is a hill-climbing algorithm where each cycle is one &quot;red-green-refactor&quot; sequence. Write a tiny failing test which no matter how small or trivial still has a few lines of setup&#x2F;teardown boilerplate, make the smallest possible code change to make the tiny test pass (change minus sign to plus sign?), run the ENTIRE test suite to make sure that your sign flip didn&#x27;t break anything anywhere else, if the code needs to be refactored do so and run the entire test suite again, fucking repeat. There are a number of theoretical advantages to this from a management perspective:<p>* Developers produce working code quickly in the early stages of the lifecycle, whereas with the slow approach you do a lot of sittin&#x27; and thinkin&#x27; up front without much to show for it -- maybe some design documents or UI mockups, I dunno.<p>* Development no longer relies on developers&#x27; internal mental models of the code. Developers now code against a model which is incarnate in the test suite -- itself a deliverable, documentable artifact.<p>* Because programmers no longer work from internal mental models but the single-bit state of &quot;do the tests as written pass or fail?&quot;, the concept of &quot;code ownership&quot; -- along with related management problems of coders waxing territorial over the pet modules they&#x27;ve spent days or weeks ruminating over in order to understand deeply enough to change -- evaporates.<p>* Programmers look busy all the time, because they are constantly typing out test code to exercise even the most trivial of changes.<p>* Thanks to pair programming, you no longer need worry about the &quot;guy in a room&quot; problem. Your dev team is always seen to be interacting with one another.<p>But I hate it because it is incompatible with my temperament. I like to think about _what_ it is I intend to write, before hammering out test cases to exercise it.
评论 #8689209 未加载
评论 #8695917 未加载
评论 #8690882 未加载
kevin_thibedeauover 10 years ago
It seems like most of his problems would be alleviated by working on a non-volatile version of the code in a private branch. The kids these days tend to favor a VCS that has this feature.
Mobiu5over 10 years ago
Bruce Lee say: Code like water ^_^
afarover 10 years ago
I wonder what pg thinks of this?
4ydxover 10 years ago
This is why golang.
dschiptsovover 10 years ago
&gt; You can’t wish away Design Process.<p><i>Furious activity is no substitute for understanding.</i><p><i>Before you start to writing the code, YOU HAVE SPEND A LOT OF TIME STUDYING YOUR PROBLEM.</i> (Brian Harvey, CS61A)<p><i>If you can’t write it down in English, you can’t code it.</i><p><i>Programs must be written for people to read, and only incidentally for machines to execute.</i> Immortal classic.)<p><i>The sooner you start to code, the longer the program will take.</i><p><i>Details count. (Devil is in the details).</i><p><i>Get your data structures correct first, and the rest of the program will write itself. (Data structures suggest algorithms).</i><p><i>Premature optimization it the root of all evil.</i><p>There is nothing new, of course. In &quot;old times&quot;, even if &quot;old programmers&quot; didn&#x27;t have such marvels like Java or Javascript, being mostly scientists, they have figured out &quot;how their minds work&quot; and in what kind of processes they are mere parts.<p>An one sentence summary could go like this - &quot;Programming is an engineering discipline, Coding is a translation skill&quot;. To write down quickly one has to spent a life-time thinking and doing.
评论 #8686460 未加载
评论 #8686756 未加载
benihanaover 10 years ago
&gt;This is why I believe that we need older people, women, educators, and artists<p>Remember, if you&#x27;re a young man, or you don&#x27;t have the <i>title</i> of artist or educator, you&#x27;re obviously not a people person and you&#x27;re fucking up software, shitlord.
wslhover 10 years ago
I posted the same article 1 day ago... but used the https address... <a href="https://news.ycombinator.com/item?id=8678439" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=8678439</a>
评论 #8686118 未加载
idibidiartover 10 years ago
Has anyone read this book and for those who have is there a correspondence here?<p><a href="http://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374533555" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;Thinking-Fast-Slow-Daniel-Kahneman&#x2F;dp&#x2F;...</a>
评论 #8686381 未加载
GFK_of_xmaspastover 10 years ago
I&#x27;ve worked with slow programmers, including someone a lot like the poster, and in my experience they never produce anything that was worth the wait.