Friday, November 8, 2013

The Six Most Common Species Of Code

377 comments:

  1. A CS 101 student would never write a recursive function.

    ReplyDelete
    Replies
    1. Funny because I am a CS 101 student and I did in fact write a recursive function without the help of outside resources for one of the functions needed in a project.

      Delete
    2. This comment has been removed by the author.

      Delete
  2. @Michael Depending on the teacher taking the CS101. I am pretty much sure every one in my batch would have written a recursive function over an iterative solution

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. @Saurabh, Michael
    Recursive function for Fibonacci will be very inefficient. Its running time will grow exponentially with X. :) Watch this video : http://www.youtube.com/watch?v=GM9sA5PtznY

    ReplyDelete
  5. I hope someone noticedthe point of this post and which in my view is that the more you know things, the more constrained your view becomes, instead of thinking in a straightforward manner, we think of all the ways something could go wrong and more often than not, it holds us back from doing anything.

    ReplyDelete
  6. @Animesh

    Recursion is not used without memoization. With it, it's a linear algorithm.

    ReplyDelete
  7. Math guy's program will go in an infinite loop if b is a non integer number :/

    ReplyDelete
  8. This is sooo true and really funny.. i have been there and done that for all the different roles [Excpet the cat ofcourse ;)] .... code written at a large comany is the best.. ROFL!

    ReplyDelete
  9. why u guys senti by looking at this ?
    this if for fun only :) :)

    ReplyDelete
  10. The Math PhD's closed-form answer is less efficient than the basic iterative/recursive solution. It requres 2n (or for the rounding version, n) multiplications to do the exponentiation, while the brute-force solution requires n additions, which on most processors are faster than multiplications.

    ReplyDelete
  11. LOL ! Funny ! I laughed so much when I saw the "Code Written At a Large Company" part ! LOL

    ReplyDelete
  12. My version of fibonacci number:
    int fibonacci(int n)
    {
    return rand();
    }

    ReplyDelete
  13. so no one gives a sh!t about the computational complexity. All the recursive implementations have exponential complexity. And I seriously have no clue what the author tried to prove with the totally gibberish large company or math PhD code.

    How about the following:
    int fibonacci(int x){
    if (x <= 2)
    return 1;
    else {
    int sum = 1, oldsum = 1, tmpsum;
    for (int a = 3; a <= x; a++) {
    tmpsum = sum;
    sum = sum + oldsum;
    oldsum = tmpsum;
    }
    return sum;
    }
    }

    It has linear complexity.

    ReplyDelete
  14. A database specialist would write

    SELECT Value FROM dbo.Fibonacci WHERE n = @n;

    ReplyDelete
  15. I would be surprised if a large company has a fibonacci method that runs on O(2^n) time.

    ReplyDelete
  16. This comment has been removed by the author.

    ReplyDelete
  17. @Unknown -- hahaha my thoughts exactly upon reading this. Just look it up!

    funny comic

    ReplyDelete
  18. This comment has been removed by the author.

    ReplyDelete
  19. When I took my bachelor degree, I used "cat" species code for my homework. The code worked, but guess what? Got 0 because my teacher didn't understand any sh*t I wrote :))

    ReplyDelete
  20. This comment has been removed by the author.

    ReplyDelete
  21. This comment has been removed by the author.

    ReplyDelete
  22. ROFL. Had a nice read.

    Now for the folks who have commented with suggestions on optimizing the algorithm:
    Seriously?!! Don't you guys get humour at all? (facepalm)

    ReplyDelete
  23. This comment has been removed by the author.

    ReplyDelete
  24. This comment has been removed by the author.

    ReplyDelete
  25. I get the humour, but for those suggesting improvements, here's a simpler one -

    void fibonacci(int number_of_terms){
    int T1=0, T2=1;
    do{
    T1 = T1 + T2;
    T2 = T1 - T2;
    printf("%d\n", T2);
    number_of_terms--;
    } while(number_of_terms > 0);
    }

    This is in C btw, and here's a compiled version - http://ideone.com/gs0Duz

    ReplyDelete
  26. the best code is written by your cat.

    ReplyDelete
  27. This comment has been removed by the author.

    ReplyDelete
  28. Replace all of the method and variable names with variations on 'asdfjkl' and change the comments to '//does stuff' and '//does the rest of stuff' and that's basically what everything I code looks like.

    ReplyDelete
  29. This comment has been removed by the author.

    ReplyDelete
  30. Here we go, complete imagination of author went to a toss. And post has become dead ground for recursive algo complexity discussion. Screw you coding wannabes.

    Too good post. Don't do CS graffiti here.

    ReplyDelete
  31. This comment has been removed by the author.

    ReplyDelete
  32. It doesn't take a Ph.D. to know the direct formula for the general element in the Fibonacci sequence.

    I do wonder why the one() instead of numbers.

    ReplyDelete
  33. I suppose `one()` may return an object with various methods, e.g. `.sign()`, `.magnitude()`, `.negative()` and `.reciprocal()`. This list may be expanded in the future. Not so with the language builtin `1`.

    ReplyDelete
  34. i do as

    f(n)=( (1+sqrt(5))^n - (1-sqrt(5))^n ) / (sqrt(5)*2^n)

    so what i become ?

    ReplyDelete
  35. There is a solution which runs in O(log(n)) to compute the n'th term. No caching.

    ReplyDelete
  36. It's one() and add() instead of 1 and + because the mathmathic field won't make a difference. So it's way more general!

    ReplyDelete
  37. There's a solution that runs with O(1) posted above.

    A Pythonista could just do this:

    import mpmath

    print( fib( n ) )

    ReplyDelete
  38. Had a good laugh :D

    Having worked at 5 *very* different companies in 5 years, I can testify that there is a lot of truth to this!

    (Except perhaps the one with the cat)

    ReplyDelete
  39. Ah the varied species! Found some more in the comments! :D

    ReplyDelete
  40. And code written by a student, that paid attention during algoritms, knows how to google and did remember to trust only reliable sources of information...

    http://introcs.cs.princeton.edu/java/23recursion/Fibonacci.java.html

    ReplyDelete
  41. is missing the kernel guy code:

    int fib(int n) {
    if (n < 0) {
    #ifdef HAVE_ERRNO
    errno = EDOM;
    #endif
    return -1;
    }

    return n == 0
    ? 0
    : (n == 1
    ? 1
    : (n == 2
    ? 2
    : fib(n - 2) * fib(n-1)
    )
    );
    }

    ReplyDelete
  42. Lol so true, code written at large company does look like that, (why? :()

    ReplyDelete
  43. This comment has been removed by the author.

    ReplyDelete
  44. Phew! Then who'd write a O(lg(n)) algorithm using matrix exponentiation ? Only me? :P

    [{1 1},{1 0}]^n = [{F_(n+1) F_n},{F_n F_(n-1)}]

    Also, x^n = x^(n/2)*x^(n/2)

    which has O(lg(n)) ;)

    ReplyDelete
  45. Just to be pedantic for my CS/math bros:
    The CS101 code doesn't need recursion or memoization, and that would occur to most students, since that's how people do it by hand: they take the last two numbers, add them together, and get a new number. Then they can forget the oldest number. A simple for loop takes care of that. Admittedly, this is explicit memoization.

    But worse, the code by a "math phd" isn't any faster than that, and is inexact if there is rounding error, unless it uses an overcomplicated math framework that handles sqrts symbolically.

    Still, if you change the (math phd?) exponentiation function to do successive squaring, you get the best running time so far, O(log n). A CS101 student could even work out how to do it without a heavyweight math library, since all of the intermediate computations are on numbers of the form (a+b*sqrt(5))/2^n where a,b, and n are integers. So you only need integer arithmetic.

    There other O(log n) algorithms, such as ones exploiting the recurrences
    F_(2n-1) = (F_n)^2 + (F_(n-2))^2
    and
    F_(2n) = (2F_(n-1) + F_n)F_n

    Sincerely,
    a math phd candidate

    ReplyDelete
  46. The Math PhD would use haskell and produce an infinite list of fibonacci results.

    ReplyDelete
  47. I think math phd should write that in Lisp.

    A simple version would be, but you may expand to add other parameter forms.

    (defun fib (x) (if (< x 2) x (fib (- x 1) (- x 2))))

    ReplyDelete
  48. My most beloved school of coding is so called 'Weimar school'. It used by Germans for writing embedded code, mainly safety critical code. It goes something like this:

    #define ONE 0U
    #define TWO 1U
    #define E_OK 0U
    #define THRE 16U
    #define HUNDRED 100U
    uint8_t UDS_tx_buff_au8[HUNDRED + ONE]

    uint8_t panic(uint16_t kondition_u16)
    {
    uint8_t temp_u8;

    /* I am evaluating kondition */
    if(kondition_u16 > THRE)
    {
    UDS_tx_buff_au8[ONE] = ONE;
    UDS_tx_buff_au8[TWO] = TWO;
    temp_u8 = HUNDRED;
    }
    else
    {
    UDS_tx_buff_au8[ONE] = ONE;
    UDS_tx_buff_au8[TWO] = ONE;
    temp_u8 = HUNDRED;
    }

    return temp_u8;
    }

    F$ck ya common sense, logical expresions folding and ROM saving.
    MISRA and QAC said so. German engineering knows that;D

    ReplyDelete
  49. Hmmm ... a functional programmer writing in C may write:

    return ((x == 1) || (x == 2)) ? 1 : (fibonacci (x - 1) + fibonacci (x - 2));

    arguing that: (a) tail recursion would take care of recursion costs, and (b) why bother with control flow if we only need the values.

    Reminds me of Perlis' quip: C programmers know the cost of everything and value of nothing, while Lisp programmers know the value of everything but the cost of nothing. :-)

    Thanks for a fun post.

    ReplyDelete
  50. Has anybody noticed that the smartest code with best practices is actually written by the cat?? Dude your cat is awesome..

    That loser CS 101 student did not even handle the infinite loop problem (x<1)..

    Soft Kitty, Warm Kitty, little ball of fur, Happy Kitty, Sleepy Kitty, purr purr, purr #respect

    ReplyDelete
  51. A hackathon coder would use this:

    int getFibonacciNumber(int n) {
    int table[] = {-1, 1,1,2,3,5,6,13};
    if ((unsigned int)n > 13)
    return -1;
    return table[n];
    }

    ReplyDelete

  52. F_n = F_{n-1} + F_{n-2},\!\

    F_n = F_{n-1} + F_{n-2},\!\


    F_{n-2} = F_n - F_{n-1}

    F_{-n} = (-1)^{n+1} F_n

    F_{n}=\sum_{k=0}^{\lfloor\frac{n-1}{2}\rfloor} \tbinom {n-k-1} k

    ReplyDelete
  53. Code written by CS 101 student has too much indentation and looks too clean. In reality, the code would be flush against the left margin, no indents, no whitespace between operators/operands, and would probably have redundant comments on every other line (to please the prof), e.g. "//This is for the case x = 1 //This is for the case x == 2"

    ReplyDelete
  54. Code as written by a hacker:

    public int fib(int n) { return (n > 2) ? fib(n-1)+fib(n-2):0; }

    Code as written as a seasoned: developer


    import org.apache.commons.math;
    public int fib(int n) {
    return Math.fibonacci(n);
    }

    ReplyDelete
  55. So true, Going through this I had a flashback of all companies i have worked with in the last 15 years.
    More you know, the more constrained you are

    ReplyDelete
  56. This comment has been removed by the author.

    ReplyDelete
  57. Comman, at least there will be unit tests in the code produced at a large company, lol

    ReplyDelete
  58. I am going to write cat code in my company tomorrow :) :P

    ReplyDelete
  59. Code written by a type theorist. (It calculates Fibonacci numbers in the Haskell type system.)


    {-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, UndecidableInstances #-}
    data Zero
    data Succ n
    class Add a b c | a b -> c
    instance Add Zero b b
    instance Add a b c => Add (Succ a) b (Succ c)
    class Fibb a b | a -> b
    instance Fibb Zero Zero
    instance Fibb (Succ Zero) (Succ Zero)
    instance (Fibb a r1, Fibb (Succ a) r2, Add r1 r2 b) => Fibb (Succ (Succ a)) b


    To calculate, you need to create placeholder values with appropriate types, and ask the interpreter what type the combination of the two would have.

    *Main> let fibb = undefined :: (Fibb a b) => a -> b
    *Main> let six = undefined :: Succ (Succ (Succ (Succ (Succ (Succ Zero)))))
    *Main> :t fibb six
    fibb six
    :: Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ Zero)))))))

    ReplyDelete
  60. Sorry, couldn't resist... Bad Indian code http://pastie.org/8475451

    ReplyDelete
  61. Just a thought: one can compute Fib(n) in O(1). There is a nice closed from for Fib(n) to derived it consider that it satisfies:

    Fib(n+2) - Fib(n+1) - Fib(n) = 0

    nice, linear and homogeneous.

    The punchline is that

    Fib(n) = c0 * b0^n + c1*b1^n

    where b0 and b1 solve for

    x^2 - x - 1 =0 [Golden ratio!]

    and c0 and c1 are so that

    co + c1 = Fib(0) = 1
    c0*b0 + b1*b1 = Fib(1) = 1

    Though, accuracy might be an issue.

    ReplyDelete
  62. And then there's the smart way to do it:

    https://gist.github.com/ElectricJack/7441844

    ReplyDelete
  63. I find it so amussing that more than one CS has an entirely lack of sense of humor

    ... it's actually depressing.

    ReplyDelete
  64. And this is how it is done in ruby :)

    def fibonaci(n)
    a=[0]
    (o..n).map {|x| x<=1? a[x]=x :(a[x] = a[x-1]+a[x-2])}
    puts a.inspect
    end
    end

    ReplyDelete
  65. return int(0.5+(pow(1.618033988749895, n) / 2.23606797749979));

    ReplyDelete
  66. This comment has been removed by the author.

    ReplyDelete
  67. The real Math Ph.D. wouldn't use `one()` or `add(one(), one(), one(), one(), one())` when there is already a `zero()` defined. Rather he would write it using induction, like
    `succ(zero())`, or `succ(succ(succ(succ(succ(zero())))))`. Hope that helps ;)

    ReplyDelete
  68. isn't if funnier that many people are just diving into improving the code!!! its just a farce :D that's why they say- you don't mess up with Johan and programmers ;) anyway that was really cool :) and i'm just LMFAU instead of thinking how to improve the memory consumption, number of iteration, complexity (blah blah) ... :D

    ReplyDelete
  69. This comment has been removed by the author.

    ReplyDelete
  70. Simply super comments are posted here cqdezx..

    ReplyDelete
  71. Nice post. Every one should implement this one tout-voir

    ReplyDelete
  72. Those post in the blog are very useful valenciald…..

    ReplyDelete
  73. Nice Post and all information's are used to everybody
    qsnwhw

    ReplyDelete
  74. Not only to read need to spreed every one
    motherschoicebirth

    ReplyDelete

  75. its really informative tutorial. Thank you for this tutorial .
    KmlyCt

    ReplyDelete
  76. For my view is Really nice,because all peoples are giving the wonderful comments
    newageafricatrust

    ReplyDelete
  77. its really informative tutorial. Thank you for this tutorial israned

    ReplyDelete
  78. The information which you people are given are really superb..!!! TarragonaHotelSbExpress

    ReplyDelete
  79. Its useful to every one and keep posting spanimax

    ReplyDelete
  80. Simply super comments are posted here..deadbug

    ReplyDelete
  81. Not only to read need to spreed every one
    grokitbetter

    ReplyDelete
  82. All the post are very useful to implement in our life
    lahimss

    ReplyDelete

  83. What a good suggestion posted by the peoples.
    BizHency

    ReplyDelete
  84. Not only to read need to spreed every one
    propacportugal

    ReplyDelete
  85. Simply super comments are posted here steingrimveum..

    ReplyDelete
  86. Those post in the blog are very useful…..
    wlsxk

    ReplyDelete
  87. I am so excited while I read all the comments.
    kyjd011

    ReplyDelete

  88. Thank you for this guidance.its really informative for all.. pulmonologi-ui

    ReplyDelete
  89. The information which you people are given are really superb mercenary-market..!!!

    ReplyDelete
  90. Thank you for this tutorial.its really informative tutorial posterbride

    ReplyDelete
  91. Simply super comments are posted here. Lsklp

    ReplyDelete
  92. Thanks for the comments which the peoples are give here stylewheel

    ReplyDelete
  93. Its very useful if every one should follow this iipus

    ReplyDelete

  94. Thank you for this guidance.its really informative for all..
    fydershanesi

    ReplyDelete
  95. Not only to read need to spreed every one venkconsult

    ReplyDelete
  96. What a good suggestion posted by the peoples brwpaper

    ReplyDelete
  97. Thank you for this guidance.its really informative for all twodoorsbbq

    ReplyDelete
  98. This comment has been removed by the author.

    ReplyDelete
  99. The information which you people are given are really superb..!!! saskoilpatch

    ReplyDelete
  100. Thangamagan Audio songs
    Size Zero review
    Thangamagan Audio songs Checin Informatyio jnlie news info All Aout Cobgress
    Size Zero review Just boring news topics always caring about fun times

    ReplyDelete
  101. Thangamagan Audio songs
    Size Zero review
    Thangamagan Audio songs Checin Informatyio jnlie news info All Aout Cobgress
    Size Zero review Just boring news topics always caring about fun times
    Airtel 4G Girl Sasha Chettri Images
    Kumari 21F Box Office Collections

    ReplyDelete
  102. Thangamagan Audio songs
    Size Zero review
    Thangamagan Audio songs Checin Informatyio jnlie news info All Aout Cobgress
    Size Zero review Just boring news topics always caring about fun times
    Airtel 4G Girl Sasha Chettri Images
    Kumari 21F Box Office Collections

    ReplyDelete
  103. This comment has been removed by the author.

    ReplyDelete
  104. Thank you for sharing it. See more ideas about new year at : http://azhappynewyear.com.

    ReplyDelete
  105. Great Information. I would like to appreciate your efforts. See more ideas about new year at : www.anewyear2016.com.

    ReplyDelete
  106. I was noticing from many days that your blog is helping too many readers as your articles are easy to understand and helpful to us.
    I think you should explore the articles on your website, You should also cover different different categories for articles as you writes awesome. Thanks for sharing this great article with us.
    HostGatorCouponCodesFactory

    ReplyDelete
  107. Valentine messages, quotes, letters & cards.Celebrate Happy Valentines day 2013 with the best Valentines Pictures, Valentine Messages, Valentines Quotes, Valentine's Day Gifts, Cards. Valentines day, Love Quotes, valentines day 2016 images, valentines day messages 2016, valentines day sms 2016,valentines day 2016 messages and sms, valentines day 2016 greetings, valentines day poems 2016,valentines day 2016,valentines day quotes 2016,valentines day 2016 quotes,valentines day hd images 2016 Love Poems, Love Messages, Relationships, Gift Ideas,Get Happy Valentines Day 14th feb 2016 wallpaper, celebration ideas, Date & clothings ideas, Messages, Quotes, Gifts hints for her and him. Valentines day, Love Quotes, valentines day 2016 images, valentines day messages 2016, valentines day sms 2016,valentines day 2016 messages and sms, valentines day 2016 greetings, valentines day poems 2016,valentines day 2016,valentines day quotes 2016,valentines day 2016 quotes,valentines day hd images 2016 Love Poems, Love Messages, Relationships, Gift Ideas,Get Happy Valentines Day 14th feb 2016 wallpaper, celebration ideas, Date & clothings ideas, Messages, Quotes, Gifts hints for her and him,happy new year 2016 hd wall papers,quotes,greeetings,hd images and sms.



    t20 world cup 2016 Live Streaming, live score, schedule in pdf, match preview, prediction, highlight, bit, live telecast, fixtures, World Cup venues, stadiums, teams,t20 world cup 2016 theme song, Pools, 2016 t20 world cup india vs pak,ICC T20 Live Streaming - T20 World Cup 2016 Schedule, Time Table, Fixtures, Teams, icc t20 live streaming 216 india vs pakistan,icc t20 live scores 2016 , icc t20 pakistan vs india scores,icc t20 india vs pakistan live streaming india, ICC T20 WC Live Streaming Score. t20 world cup 2016 Live Streaming, live score, schedule in pdf, match preview, prediction, highlight, bit, live telecast, fixtures, World Cup venues, stadiums, teams,t20 world cup 2016 theme song, Pools, 2016 t20 world cup india vs pak,ICC T20 Live Streaming - T20 World Cup 2016 Schedule, Time Table, Fixtures, Teams, ICC T20 WC Live Streaming Score.




    Valentine messages, quotes, letters & cards.Celebrate Happy Valentines day 2013 with the best Valentines Pictures, Valentine Messages, Valentines Quotes, Valentine's Day Gifts, Cards. Valentines day, Love Quotes, valentines day 2016 images, valentines day messages 2016, valentines day sms 2016,valentines day 2016 messages and sms, valentines day 2016 greetings, valentines day poems 2016,valentines day 2016,valentines day quotes 2016,valentines day 2016 quotes,valentines day hd images 2016 Love Poems, Love Messages, Relationships, Gift Ideas,Get Happy Valentines Day 14th feb 2016 wallpaper, celebration ideas, Date & clothings ideas, Messages, Quotes, Gifts hints for her and him. Valentines day, Love Quotes, valentines day 2016 images, valentines day messages 2016, valentines day sms 2016,valentines day 2016 messages and sms, valentines day 2016 greetings, valentines day poems 2016,valentines day 2016,valentines day quotes 2016,valentines day 2016 quotes,valentines day hd images 2016 Love Poems, Love Messages, Relationships, Gift Ideas,Get Happy Valentines Day 14th feb 2016 wallpaper, celebration ideas, Date & clothings ideas, Messages, Quotes, Gifts hints for her and him,happy new year 2016 hd wall papers,quotes,greeetings,hd images and sms..




    http://www.greetingsbus.com

    http://www.valentinesday2016-images.com

    http://www.icct20livestreaming.com

    ReplyDelete
  108. i THINK THERE IS SOME grammatical mistakes mothers day 2016 quotes and some spelling mistakes too Fathers day 2016 quotes and check iphone 7 too Apple iPhone 7 and soon cbse result is going to live on the website CBSE RESULT 2016









    ReplyDelete

  109. I stumbled upon this I have discovered It positively useful and it has aided me out loads. I am hoping to contribute & aid different users like its helped me. Great job.

    happy father's day
    father's day 2016
    happy father's day 2016


    Fathers Day Greetings
    Fathers Day Messages
    Happy Fathers Day Sayings

    ReplyDelete