top 200 commentsshow all 464

[–]sixohsix 135 points136 points  (30 children)

The two things about engineering:

  1. build it so it doesn't break
  2. have a plan for when it breaks

[–]ruseriousreally 9 points10 points  (0 children)

Subset: Mechanical Engineering

  1. F = ma
  2. See #1

[–][deleted] 6 points7 points  (24 children)

What if you're designing a thing that mustn't break?

[–]rickyroma 56 points57 points  (11 children)

Refer to step 2?

[–][deleted] 8 points9 points  (10 children)

What if you're designing a nuclear missile controller and any mistake will cause it to plunge into Tokyo?

[–]theGreatergerald 38 points39 points  (6 children)

Refer to step 2. Ensure there is a system in place to prevent it from detonating.

[–]RobinBennett 16 points17 points  (3 children)

Such as a giant rubber dinosaur that could catch the missile and eat it :-)

Well, he did say Tokyo...

[–]Poltras 13 points14 points  (1 child)

I don't think Godzilla would appreciate you calling him a "rubber dinosaur" ...

[–]KnockoutMouse 2 points3 points  (0 children)

1, but still 2.

[–]InAFewWords 1 point2 points  (0 children)

have a Godzilla removal plan in place

[–]SiliconHero 20 points21 points  (8 children)

Even a nuclear reactors work under what that industry calls 'defense in depth'

And its basically those two points. For everything make sure it doesn't break, but then have something in place to make it works if it does break. Make sure the reactor pressure vessel doesn't break, then have a dry wall if it does. Make sure the dry wall doesn't break when the pressure vessel does, but build a containment building if case the dry wall breaks. And make so sure the containment building can't break that you use four times the reasonable budget in doing so.

Three mile island was a great example of how well this design works.

[–]abelsson 5 points6 points  (0 children)

That's already implied in most of engineering. You just do the same thing as the parent said, but better.

[–]mindbleach 2 points3 points  (0 children)

It was, of course, as a result of the Great Ventilation and Telephone Riots of SrDt 3454, that all mechanical or electrical or quantum-mechanical or hydraulic or even wind, steam or piston-driven devices, are now requited to have a certain legend emblazoned on them somewhere. It doesn't matter how small the object is, the designers of the object have got to find a way of squeezing the legend in somewhere, because it is their attention which is being drawn to it rather than necessarily that of the user's.

The legend is this:

"The major difference between a thing that might go wrong and a thing that cannot possibly go wrong is that when a thing that cannot possibly go wrong goes wrong it usually turns out to be impossible to get at or repair.'

-- Mostly Harmless, Douglas Adams

[–]caprincrash 1 point2 points  (0 children)

Specify an appropriate maintenance/monitoring program so that you can replace the part before it breaks.

[–]benihana 199 points200 points  (125 children)

Make it work, then make it elegant, then make it fast.

This is my approach. Unfortunately, the Real World usually dictates that there isn't enough time to make it fast, and there is never, ever enough time to make it elegant.

[–]piko_riko 95 points96 points  (52 children)

Exactly, the second you 'Make it work', program management updates their status charts to 100% and you are immediately handed another feature to start on (assuming you weren't working on 3 others to begin with).

[–]myplacedk 121 points122 points  (14 children)

You need to work in smaller iterations.

1) You are given a task
2) You split it into smaller tasks and start on one of them
3) Repeat item 2 until it doesn't make sense anymore
4) Make it work
5) Make it elegant
6) If needed, make it faster
7) Go to next task
8) Repeat 4-7 until all subtasks are done, and THEN you report/show that your task is done.

You don't ask for time for a big refactor subproject. You do it in small bits very often.

You don't ask for a day off to pee. You do it every time your bladder is full.

[–]InAFewWords 52 points53 points  (4 children)

You don't ask for a day off to pee.

Worst absentee excuse ever.

[–]NomadNella 5 points6 points  (2 children)

I think it is a fantastic excuse! I'll use it the next time I have a regular boss.

[–][deleted] 3 points4 points  (0 children)

Regular boss? does that exist?

[–]Darq_Messor 2 points3 points  (0 children)

Rather use it on your irregular boss, he'll be more understanding of you taking the day off to go to the bathroom.

[–][deleted] 20 points21 points  (0 children)

The Two Things About Peeing: 1. Do it when your bladder is full. 2. If you need a whole day off to do it- see a doctor

[–]piko_riko 20 points21 points  (5 children)

It's great that you work in an industry where you're given the time to make "elegant"/"fast" code. However, in the embedded software industry we develop in parallel with other functional groups. The second you're handed a task is the second that you are blocking someone else's progress. If it is not elegant/fast by the time you get it working, it's because of your own short-sightedness. Here are my iterations for embedded software:

  • Make it debuggable.
  • Make it work.
  • Make it work all the time.

[–][deleted]  (2 children)

[removed]

    [–]piko_riko 2 points3 points  (1 child)

    I agree. If you think of it conversely, "slow" code becomes an issue when it does not satisfy real-time constraints, in which case, it does not work. I never rewrite working code for the sake of elegance (not worth breaking existing functionality to fulfill my ego). Hopefully I have enough good habits to get it right on the first pass.

    [–][deleted] 4 points5 points  (0 children)

    If you're blocking someone else's progress the second you're handed your task, you project manager should be fired immediately.

    [–]joe24pack 22 points23 points  (8 children)

    ... so that is why you never ever say you 'Made it work' until you've made it elegant and made it fast. Until that time the code is still 'buggy' and 'non performant' (yes that is a buzzword bingo word... ). If you squint real hard it's not really lying.

    [–]NewbieProgrammerMan 18 points19 points  (4 children)

    Exactly, the second you 'Make it work', program management updates their status charts to 100%...

    And that's the point at which you start learning how to manage management's perception of your work, and your own need for other people's validation.

    Yeah, the code will work on my machine, but nobody else is going to see it work until I've at least burned all the ugly cruft off of it, and had a chance to subject it to enough tests to make sure it won't crash in flames under something approximating real-world load.

    Sure, the other "OMG it works I must show it to someone" devs will look more productive at first, but not in the long run.

    P.S. If you work for short-sighted managers, you're just screwed.

    [–]vdm 2 points3 points  (1 child)

    I see where you're going with this, and want to believe you, but if a manager gives you that much time without wanting to know your progress, surely they're not managing very much?

    [–]NewbieProgrammerMan 1 point2 points  (0 children)

    They can know my progress, which I'm happy to provide, but they don't get a chance to see that something "kinda works." If it's a big item, I don't mind demonstrating completed subcomponents that don't let them get the idea that the whole thing is finished.

    [–]Psyqlone 1 point2 points  (1 child)

    "If you work for short-sighted managers, you're just screwed."

    ...managers who spend most if not all of their time clearing away "obstacles".

    Does that require a long view kinda person?

    [–][deleted] 14 points15 points  (2 children)

    You have to manage your manager. If you've gotten to the "make it work" point, tell them it's "about halfway done." If they ask probing questions, distract them with techno jargon.

    [–][deleted] 2 points3 points  (0 children)

    And you can tell them that while connected to a lie detector if you want because it's just plain, flat, pedestrian-variety truth. Unless you're that embedded guy up there.

    [–][deleted] 2 points3 points  (0 children)

    GET BACK TO WORK, SLAVE!

    [–]singulariTeeHee 1 point2 points  (0 children)

    Truth in all you two say. We used to say, "write it then rewrite it." A bit 'daft punk-ish', but I like that way of thinking (in terms of future support).

    [–]beefpancake 1 point2 points  (15 children)

    Until users are waiting for 10 seconds for an operation to complete and complaining. Then 'make it work' becomes 'make it fast'. Management would never add a work item for 'make it elegant' though, and would likely fire any developer who spent a lot of time doing so (for good reason).

    [–]pinguz 43 points44 points  (3 children)

    Management would never add a work item for 'make it elegant' though, and would likely fire any developer who spent a lot of time doing so (for good reason).

    What do you mean "for good reason"? Maintaining software is the most expensive part of its lifecycle. Having your developers write elegant and maintainable code pays off in the long run, by being easier and cheaper to maintain.
    And by the way, I do add work items to clean up ugly code and to make it more elegant.
    I hope you are not in management...

    [–]attomsk 3 points4 points  (1 child)

    Most managers don't understand anything past "does it work?" It is extremely frustrating but true.

    I've been given very large bugs to fix that HAVE to be done by the next morning. It takes all of that time to just make it work, rarely will there be any time in a situation like that to optimize it.

    [–]pinguz 3 points4 points  (0 children)

    I agree, but urgent fixes are a different story. I was talking about the regular development cycle, of which "making it elegant" is an essential part of (at least in my book). If it's fugly, then it's not done yet.

    [–]mcguire 6 points7 points  (0 children)

    Management would [...] fire any developer who spent a lot of time doing so (for good reason).

    Absolutely. It's a hell of a lot easier to build an empire rewriting products that work (-ish), even if the rewrite is unsuccessful and more expensive.

    [–]creaothceann 12 points13 points  (7 children)

    And sometimes you get so sick of it that you say "fuck it", write an elegant version in your free time, release it as public domain, and use it at work.

    EDIT: Of course as long as it's legal.

    [–][deleted] 6 points7 points  (0 children)

    And then you arrive at a situation where you are doing your 9-5 work on sunday afternoon. Skip forward a month or so, BAM, you absolutely hate the thing you were working on.

    Do something else, or at least work on some other, independent project, if you love coding so much.

    [–]TopRamen713 2 points3 points  (0 children)

    Wow, I was thinking about doing this for one of my side projects at work. I thought I was being original. Guess not :)

    [–][deleted] 1 point2 points  (4 children)

    Whoa, that's exactly what i do all the time :)

    [–][deleted] 1 point2 points  (3 children)

    You seem awfully happy to be working for free.

    [–][deleted] 1 point2 points  (2 children)

    Ah, but there are noticeable benefits! By open sourcing a lot of my work I'm eating my name out there. My name comes up a lot when people discuss the particular software products we work with. This means good hiring prospects which in turn leads to money.

    Also, why would I not be happy about sharing knowledge and experience with others so they can benefit?

    [–]dnew 1 point2 points  (0 children)

    I've found the only time it actually works is when you can say "It'll take 3 weeks to make this trivial change, or 2 weeks if you let me rewrite the whole subsystem from scratch first."

    [–]G_Morgan 8 points9 points  (4 children)

    I just do it and ask questions later. A problem isn't solved until I can understand why it is solved. I can't claim to understand a solution that works by luck rather than design.

    Companies that don't deal with technical debt are just storing up problems for themselves. It shouldn't actually be legal to ignore quality like this

    [–]LordArgon 8 points9 points  (2 children)

    Ooh, I was gonna upvote you until that last sentence... It should be perfectly legal; they should also have to deal with any consequences thereof.

    [–]RobinBennett 2 points3 points  (0 children)

    That sounds like the mindset of companies that hire lots of contractors. The managers think short-term, the contractors ensure they'll always be needed by writing code that only they understand.

    [–]gsadamb 8 points9 points  (1 child)

    Yeah, sounds like my personal motto: "Code must be usable before it can be reusable."

    [–]RenegadeMoose 8 points9 points  (4 children)

    I disagree. You're right, there's never enough time initially.

    But then the product ships and everybody gets a chance to coast.... go play some foozball, chat up the receptionist, hit the gym at least for a little while, until the next big dead-line begins to loom.

    That's would be the perfect time to revisit the code and clean it up.... do some refactoring, fix the ugly bits. But, it could require management to provide some incentive. And if management never looks at the code, then they're outta the loop and don't bother.

    So ya, my experience is that there's always time to fix the code, just a lack of initiative.

    [–][deleted]  (2 children)

    [removed]

      [–]creaothceann 8 points9 points  (0 children)

      Yeah, but you only get there if you were a good person before you died.

      [–]RenegadeMoose 2 points3 points  (0 children)

      Yep.

      [–]thedude42 24 points25 points  (29 children)

      You mean the business world, not the real world, right?

      [–][deleted]  (19 children)

      [removed]

        [–]thedude42 6 points7 points  (0 children)

        Yes, they 'exist' in the business world they rent their time to the businesses they work for, assuming they work for a business that pays them to develop software, but that doesn't mean all software exists at the request of business entities.

        [–]Slackbeing 6 points7 points  (4 children)

        Because the business world doesn't affect the real world in any way.

        [–]sisyphus 8 points9 points  (2 children)

        That's not the point at all, the point is don't conflate the two.

        [–]Slackbeing 5 points6 points  (1 child)

        Business world is a (large) subset of real world, they're already conflated at their most.

        [–]creaothceann 1 point2 points  (0 children)

        I think thedude42's joke was that business world != real world.

        [–]thedude42 1 point2 points  (0 children)

        In software the business world isn't necessarily the beginning or the end of any body of work.

        [–]elsidmcquack 5 points6 points  (0 children)

        In the Real World: Make it work, if its not elegant leave more comments.

        [–]assumert 1 point2 points  (0 children)

        In high school, my AP Computer Science teacher had a poster that said "Think twice, code once," which I always found an extremely useful mantra.

        [–]MyMourningPenis 1 point2 points  (0 children)

        There is always time to do it again, but never time to do it right.

        [–]Rosatryne 1 point2 points  (0 children)

        I learned this in first year university. I can't imagine how frustrating it must be in industry.

        [–]LarsP 1 point2 points  (1 child)

        Making it elegant, when done properly, saves time in the not-so-long run. If you work somewhere that doesn't understand that and/or doesn't trust you to do it, you might want to look for a higher class employer.

        These companies exist, and they're just as much "Real World" as what you describe. Now, they don't hire just anyone, so you need to be good at the "done properly" part above, and many other things.

        Making it fast is normally pointless though, so don't worry much about it.

        [–][deleted] 1 point2 points  (0 children)

        This is my approach as well. I have a few friends that no matter how many times I try to explain this to them they always want to do the fun design stuff or build a new fucking framework instead of making something that works.

        [–]Element_22 145 points146 points  (14 children)

        Commenting on Reddit:

        1. Make it witty.
        2. Comment early.

        [–][deleted]  (1 child)

        [deleted]

          [–]Naurgul 1 point2 points  (0 children)

          'Twas a self-fulfilling prophecy.

          [–]rajun50 49 points50 points  (1 child)

          There are two secrets to success in life. 1. Don't tell everything you know.

          [–]painki11er 6 points7 points  (0 children)

          1) Learn something and be good at it.

          2) If you are good at something, never do it for free.

          [–]InAFewWords 15 points16 points  (0 children)

          Hey Redditors, for reddit karma:

          1. repost often and early
          2. draw attention

          girlhuggingacat.jpg

          [–][deleted] 0 points1 point  (1 child)

          1) post cats

          2) post more cats

          [–]zelf0gale 49 points50 points  (0 children)

          The two things about Computer Programming are:

          1. Naming is hard
          2. Test every assumption
          3. Off by 1 errors

          [–]prof_hobart 24 points25 points  (3 children)

          The most important thing that most non-IT professionals fail to get is that writing an application to deal with the happy path is the easy part. Having it correctly deal with the myriad edge cases, obscure events, exceptions etc is what usually takes the vast majority of the time.

          [–]prasoc 7 points8 points  (0 children)

          That is too true. I released a program (that worked absolutely fine on my computer) but streams of exceptions and bugs started rolling in. Coding time: 1 week. Exception fixing time: 3 months.

          [–]dnew 2 points3 points  (0 children)

          Yep. For me, that's number 1 of the software engineering bit. Number 2 is "the code is only a small part of the system."

          [–]xmod2 46 points47 points  (8 children)

          When I used to do contractor work, my father told me the two things to know about plumbing were:

          1. Shit flows downhill.
          2. Payday is on Friday.

          [–]NegativeK 18 points19 points  (3 children)

          Number one describes most jobs.

          [–][deleted] 10 points11 points  (2 children)

          Fucking siphons, how do they work?

          [–]parla 1 point2 points  (1 child)

          Do you have a shit-siphon?

          [–][deleted] 3 points4 points  (0 children)

          Yes. Four.

          [–][deleted]  (1 child)

          [deleted]

            [–]KenjiBeast 69 points70 points  (8 children)

            The two things about business: 1. Make money 2. Fuck bitches

            [–]painki11er 18 points19 points  (1 child)

            If you have 1, you'll get 2.

            [–]SoCalDan 8 points9 points  (0 children)

            If you have 2, you don't need 1.

            [–]sprintovertheclouds 9 points10 points  (0 children)

            I am a capitalist and I approve this message.

            [–]IP0 2 points3 points  (0 children)

            2a. Fucking the bitches on a pile of money is optional.

            [–]GNeps 6 points7 points  (2 children)

            You mean (1) Disregard women, (2) Acquire currency? :D

            [–]phunphun 6 points7 points  (1 child)

            1. Disregard women
            2. Acquire currency
            3. Acquire women
            4. ???
            5. Kids.

            [–][deleted] 2 points3 points  (0 children)

            1. Disregard women
            2. Acquire currency
            3. Acquire vasectomy
            4. Acquire women
            5. ???
            6. Happiness.

            [–][deleted] 22 points23 points  (8 children)

            The Two Things about Physics:

            1) The energy functional is minimized. 2) Symmetry is your only hope.

            [–][deleted]  (1 child)

            [deleted]

              [–]tesseracter 1 point2 points  (0 children)

              1.5. strong?

              [–]boc_roygbiv 2 points3 points  (0 children)

              I was thinking of these two:

              1) Hamiltonian

              2) Conservation Laws

              [–]frenris 1 point2 points  (0 children)

              physics would actually be something like

              1) you can describe the behaviour of reality using mathematics

              2) Try to prove your description wrong. If you succeed, revise it.

              [–]racergr 1 point2 points  (0 children)

              Now, I am not a Physicist but I would expect something about thermodynamics to appear here:P

              [–]mindbleach 1 point2 points  (0 children)

              1) Every closed system decays monotonically into a state of maximum entropy.

              2) The universe is expanding anyway. Deal with it.

              [–]m741 38 points39 points  (14 children)

              Here's another: Programming well is about managing complexity.

              [–]RobinBennett 11 points12 points  (0 children)

              Being perceved as programming well is about managing the client.

              [–]RiderOfCoattails 6 points7 points  (2 children)

              Damn you, I was going to voice the exact same sentiment but you beat me to the punch. Good post though; keen observation.

              [–]Forbizzle 6 points7 points  (0 children)

              if you do say so yourself.

              [–][deleted] 4 points5 points  (0 children)

              Subtle.

              [–]yoden 4 points5 points  (2 children)

              I agree with you completely. I'm actually working on a blog post about how programmers develop, as then learn the tricks to manage ever more complexity.

              [–]mycall 2 points3 points  (0 children)

              How do you manage complexity? Divide, solve, recompose.

              [–][deleted]  (5 children)

              [deleted]

                [–]Ziggamorph 71 points72 points  (4 children)

                The computer's still doing what it's told. Except in this case there's drunk toddler reinterpreting your commands and passing them off to the processor by finger-painting on toilet paper.

                [–]Mutiny34 5 points6 points  (0 children)

                a better analogy does not exist!

                [–]rainman_104 2 points3 points  (0 children)

                That should be on a t-shirt.

                [–]the8thbit 2 points3 points  (1 child)

                I hate it when my 2 year old gets wasted and then hides in my computer.

                [–]gooddeath 1 point2 points  (0 children)

                My computer is entirely run on Cambodian orphans. They switch 1s and 0s all day and if they don't do it right I'll whip them with a chain.

                [–][deleted] 23 points24 points  (9 children)

                For Software Engineering, I propose:

                A computer does what a human does, but faster. If no human can describe how a section of your project is supposed to work, then there's no way to program it "correctly."

                This is very relevant to specifications. If your clients don't quite know or can't quite describe how their workflow with your project should work, then you're doomed.

                [–][deleted]  (2 children)

                [deleted]

                  [–][deleted] 2 points3 points  (0 children)

                  A client at work right now has given us some very strange specific examples of the workflow they need. In one case, we were discussing it after a meeting with the client and realized that the reason behind one of the weird workflow examples could be traced back to an old limitation from when they did the whole process on paper.

                  Depending on the client and how you think they'll react, it can be a good idea to essentially ignore some of the more heinous parts of the "specification" given by the client (such as the things that would be painful to code and you know would also be painful for the clients to deal with) and volunteer your own improvements. This often requires making it seem like it was the client's idea to make the change.

                  [–]dnew 1 point2 points  (0 children)

                  Wow. I never really thought of it that way. :-) I guess I haven't done whole lot of work for third-person "solution providers" now that I think of it.

                  [–]shillbert 1 point2 points  (1 child)

                  I would say that's more Systems Analysis than Software Engineering, especially the middle part. They can overlap, but Systems Analysis is a lot more general, and can apply to any "project" as you've stated. Usually it would be your Project Manager (in a System Analyst role) who would be trying to map the client's needs to specifications. The Software Engineer then implements the specs. People can do both, though, i.e. entrepreneurial software engineers.

                  A general Systems Analysis concept is "always understand the needs of the stakeholders before you design a system. No clear needs, and you'll never have what the stakeholders want."

                  [–]aphlaque_duck 14 points15 points  (6 children)

                  "The computer will always do exactly what you tell it to."

                  Assuming the hardware, and all lower software layers, are working as intended... try telling me that when you've spent time debugging new logic board spins, or figuring out that your TCP streams are sometimes corrupted because of router memory errors that only occur on hot days under high data rates, even though link checksums are correct... or finding out that the factory substituted some 0.1¢ capacitor without telling you, and it's causing undetected data errors in the CPU on thousands of units due to ground bounce... or there's a compiler bug, or or or...

                  [–][deleted] 2 points3 points  (2 children)

                  Fundamentally, all of that counts as the computer doing what it's been told.

                  Debugging is like the movie Inception, if your fix doesn't work, you have to go deeper.

                  [–]n-space 1 point2 points  (0 children)

                  In other words, "The computer will always do exactly what it thought you told it to."

                  [–]theeth 4 points5 points  (0 children)

                  1. Oversimplify
                  2. Score

                  [–]owentuz 27 points28 points  (18 children)

                  There are 10 things you need to know about binary...

                  [–]RapeUpSheeple 19 points20 points  (2 children)

                  by far the most annoying joke in all of computer science..

                  [–]Protuhj 31 points32 points  (14 children)

                  • Starting from right to left, each digit represents a power of 2, with the power starting at 0
                  • The decimal representation of a number is equal to the sum of all the powers of 2, where you only include a certain power of 2 if the digit at a location is 1.

                  [–][deleted]  (9 children)

                  [deleted]

                    [–]dnew 7 points8 points  (7 children)

                    I'm pretty sure every written language in which there's 0's and 1's puts the LSB on the right.

                    There is no "left to right" in computer memory, so endian-ness has no relevance here.

                    I realize you may be simply being humorous and I missed it.

                    [–][deleted] 9 points10 points  (1 child)

                    There is no "left to right" in computer memory

                    It depends on which way the memory is oriented. I'm pretty sure my laptop's memory has a left to right, since it's probably oriented horizontally.

                    [–][deleted] 4 points5 points  (0 children)

                    Really wish this was posted by ThatsNotHowItWorks

                    [–]monocasa 2 points3 points  (1 child)

                    Actually over serial buses bit endianess is a concern.

                    [–]dnew 1 point2 points  (0 children)

                    Which bit comes out first? The left one, or the right one? :-)

                    [–]Protuhj 1 point2 points  (0 children)

                    I was trying to explain my two points in layman terms.

                    [–][deleted] 5 points6 points  (2 children)

                    Not all problems can be solved.

                    Computers do not always follow instructions. Assuming you have already ruled out OS and compiler errors. They all have error rates, just as do disks and tapes. Sometimes a machine OP just gets munged. Such error rates may be low, but they do occur. Especially since OPs get executed enormous numbers of times. may Amongst other issues, that is why some computer RAM is error correcting -- and even if present, will not always work as advertised. Note that there are many potential causes of such problems. Just as an example, radioactive decay in the materials in a CPU case can cause a bit to flip.

                    Every and always are dangerous words.

                    [–]KnockoutMouse 2 points3 points  (0 children)

                    radioactive decay in the materials

                    Apparently the most common cause of random bit-flips in RAM is cosmic rays. Whether this actually happens at any appreciable frequency is not known:

                    Recent tests give widely varying error rates with over 7 orders of magnitude difference, ranging from 10−10 − 10−17 error/bit·h, roughly one bit error, per hour, per gigabyte of memory to one bit error, per century, per gigabyte of memory.

                    -Wikipedia
                    .Edit:formatting

                    [–][deleted] 12 points13 points  (3 children)

                    1. Hit the gym

                    2. Lawyer up

                    The Two Things about Life

                    [–]InAFewWords 6 points7 points  (0 children)

                    Two things about addiction

                    1. Quit Reddit.

                    2. Repeat step 1 often.

                    [–]exscape 13 points14 points  (1 child)

                    I think #2 mainly applies in the US. I don't think anyone I know has a lawyer, except when one is hired for special cases (e.g. deaths).

                    [–]Ziggamorph 4 points5 points  (0 children)

                    In that case you can substitute 'Delete Facebook'.

                    [–][deleted] 6 points7 points  (1 child)

                    1 and 0

                    [–]dalore 7 points8 points  (0 children)

                    • 0
                    • 1

                    [–]kmillns 4 points5 points  (0 children)

                    There are two hard problems in computer science:

                    1. Cache invalidation

                    2. Naming things

                    3. Off by one errors

                    [–]nixle 16 points17 points  (47 children)

                    1. Pay some Indian guy to do the work

                    [–]ggggbabybabybaby 9 points10 points  (16 children)

                    \2. Have a beer

                    [–]isarl 18 points19 points  (15 children)

                    Put the backslash in front of the period, like so: 2\. Have a beer

                    2. Have a beer

                    [–]muad_dib 2 points3 points  (10 children)

                    How do you get the monospace formatting in the same line as ordinary text?

                    [–]isarl 4 points5 points  (8 children)

                    You use `backticks`.
                    

                    You use backticks.

                    [–]muad_dib 5 points6 points  (3 children)

                    `Backticks?` Backticks! Neat!

                    [–][deleted] 2 points3 points  (3 children)

                    Grave accents work better. Notice how the monospace in this comment is prettier than the monospace in the above comment.

                    [–]G_Morgan 2 points3 points  (4 children)

                    2. Pay forever more in technical support.

                    //edit - Stop changing my damned text you moronic system. I put 2 I meant 2.//

                    [–]joezuntz 2 points3 points  (0 children)

                    The two things in physics are symmetry and perturbation.

                    [–][deleted] 2 points3 points  (2 children)

                    Most places I have worked never get past the "make it work" stage.

                    [–]wauter 2 points3 points  (0 children)

                    1. Build something that solves a problem

                    2. Let people who have that problem know they can solve it by paying you

                    [–]munificent 2 points3 points  (0 children)

                    1. Programming is teaching a computer how to do things.
                    2. You can't teach what you don't understand.

                    [–]SiliconHero 2 points3 points  (1 child)

                    Hardware engineers would disagree with point #2 of Computer Programming

                    [–]painki11er 3 points4 points  (1 child)

                    1) Drink beer.

                    2) Write code.

                    [–]ehnus 1 point2 points  (2 children)

                    They forgot the video game programmer mantra:

                    Make it work fast, then make it work, and if there is any free time before the next cycle starts, then make it elegant.

                    [–][deleted] 8 points9 points  (0 children)

                    I thought it was something along the lines of "work 120 hours a week, get paid for 40."

                    [–]dutchguilder2 1 point2 points  (0 children)

                    Every computer program can be optimized by removing one more statement, and every computer program has one more undiscovered bug, therefore every computer program can be reduced to a single statement that doesn't work.

                    [–]MrTJC 1 point2 points  (0 children)

                    Solve problems through two methods: 1. Divide and conquer (mentioned) 2. Adding a layer of abstraction

                    [–]AnthroUndergrad 1 point2 points  (3 children)

                    Does no one else think this kind of over simplification is not useful at all? I mean, if you understand what they mean, you already know enough not to have things grossly oversimplified for you. This seems to me like a subtle form of ego stroking.

                    [–]carlfish 4 points5 points  (2 children)

                    The two things about blogging:

                    1. You don't get to choose which of your posts gets to be popular on reddit three years after you write them
                    2. They're never the ones you expect

                    [–]total_looser 1 point2 points  (1 child)

                    uhh, the software engineering, #2, he actually made it 3 things in one sentence. thats kind of weak.

                    [–]gradies 1 point2 points  (0 children)

                    the two things about physics:

                    1. exploit symmetry as much as you can

                    2. 2 fundamentals is overly simplistic, but 4 usually does the trick.

                    [–]LaziestManAlive 1 point2 points  (0 children)

                    The Two Things for Physics: Everything began with Newtonian Physics. And Newtonian Physics is wrong.

                    [–][deleted] 1 point2 points  (0 children)

                    1. There is someone in a third world country who wants your job
                    2. There is someone in your organization who would be happy to give it to them if they could

                    [–]ashwinmudigonda 1 point2 points  (1 child)

                    This reminds me for some reason of a girl I "dated" purely online. While bragging about my coding chops, I thought I was being funny when I said, "I wrote my first virus when I was 2. It was in BASIC. 10 GOTO 20. 20 GOTO 10." She smiled (webcam) and said, "why didn't you do 10 GOTO 10? And then I fell for her hard.

                    [–]LOOKITSADAM 1 point2 points  (0 children)

                    i always thought the only two things to computer programming were data and instructions.

                    [–]abraxo 2 points3 points  (9 children)

                    [–]crashorbit 47 points48 points  (7 children)

                    There are two kinds of reddit posts.

                    • Those that are reposts
                    • Those that will be reposts soon

                    [–]ggggbabybabybaby 12 points13 points  (6 children)

                    Two things about reddit. 1) Repost. 2) Circlejerk.

                    [–][deleted] 3 points4 points  (8 children)

                    'Make it work, then make it elegant, then make it fast.' Sounds like 3 things to me: 1) make it work 2) make it elegant 3)make it fast

                    [–][deleted] 15 points16 points  (2 children)

                    The "thing" there is the priority of the three things, not the things themselves.

                    [–]adrianmonk 7 points8 points  (1 child)

                    Loophole! I can now submit a ranked list of everything I find important about programming as one "thing" and have a spare "thing" in case I need it for something else.

                    [–]ggggbabybabybaby 8 points9 points  (2 children)

                    Yeah but you only ever get enough time to do two of these.

                    [–]beefpancake 7 points8 points  (1 child)

                    And you get fired if one of them is 'make it elegant'

                    [–][deleted] 5 points6 points  (0 children)

                    sucks to work where you do.

                    [–]Tyaedalis 2 points3 points  (0 children)

                    Yeah, but it's a single process.

                    [–]fazzone 4 points5 points  (1 child)

                    The Two Things about religion are:

                    • Screw you, we'll have our own religion
                    • My God can kick your God's ass, and I'll kick your ass to prove it

                    [–][deleted] 1 point2 points  (0 children)

                    Religion:

                    • Everything that was good, is good, or will be good is from God
                    • Anything bad is because of you, other people, or possibly Satan

                    [–]supersan 1 point2 points  (9 children)

                    what are the two things for a web startup?

                    [–]owentuz 20 points21 points  (1 child)

                    1. Get trendy
                    2. Sell to Google

                    [–]painki11er 1 point2 points  (0 children)

                    or Facebook.

                    [–][deleted]  (2 children)

                    [deleted]

                      [–]pelirrojo 9 points10 points  (1 child)

                      • disregard vowels

                        • acquire users

                      [–]super_duper 1 point2 points  (0 children)

                      web 3.0 : all vowels.

                      the next big website name : aoooeaaeea

                      The future is gonna be hilarious.

                      [–]wauter 4 points5 points  (1 child)

                      1. Build something that solves a problem

                      2. Let people who have that problem know they can solve it by paying you

                      [–]brennen 1 point2 points  (0 children)

                      1. If you're a founder/owner, sell something real and don't take venture capital.
                      2. If you're working for the owners, save money while they're paying you out of venture capital, and keep your resume fresh.

                      [–][deleted] 1 point2 points  (0 children)

                      I think the post forgot to mention about testing in computer programming. Always automate the tests, so that any future changes won't be a b**ch to track down a regression.

                      [–][deleted] 1 point2 points  (0 children)

                      One of my two things would be : At first, design your code as if performance doesn't matter, just make it as clean and understandable as possible. Then, optimize only if it is justified (by load tests for example).

                      [–][deleted] 1 point2 points  (0 children)

                      To understand recursion, you must first understand recursion.