• jayh (unregistered) in reply to TheRubyWarlock

    No that was probably the best thing that could have happened to him. Sometimes it's hard to actually leave a bad situation (job, marriage, whatever) and the extra bump is a blessing.

  • Robert S. Robbins (unregistered) in reply to guids? lol? seriously?
    guids? lol? seriously?:
    I had a boss just like that. They think awesome programmers are fine with making 25K. Hilarious.

    That is about how much I make although I am not an "awesome programmer".

  • unregistered (unregistered) in reply to bighusker
    bighusker:
    moralityPolice:
    'at least he could now put “programmer” on his résumé.'

    Too bad he can't put "ethics" on there too.

    Why would anyone write "ethics" on their resume?

    I saw a CAPTCHA today, and it read "MORON." I thought of you.

  • Aquatoad (unregistered) in reply to Anon Fred
    Anon Fred:
    1. Some of the best people I've worked with didn't have any kind of degree. 2. The very very best do have degrees. 3. The bigger the chip on someone's shoulder about their awesome degree, the less impressive the degree is. 4. A good college education is timeless. 5. I've met people with degrees I'd never hire.

    QFT. The simple fact is that the degree indicates a higher likelihood that the candidate has a good grounding in computational theory and understands the high-level concepts.

  • Miles Archer (unregistered) in reply to Torajirou

    No english speaker would know what preterit or past perfect means.

  • (cs) in reply to dsharp
    dsharp:
    "He cut his teeth on the green screen, central computer back in the day. He didn't have to deal with stateless, disconnected systems like we use today and unfortunately, his expectations can be somewhat unrealistic"

    Actually many "green-screen" applications were completely stateless. CICS transactions are almost identical to web apps. The only difference is that web apps use the CGI protocol and CICS transaction use some other protocol.

    When you run a CICS transaction screen, it's not sitting there waiting for your input. It runs, sends the screen, and finishes. Then when the user hits the enter key, it restarts, reads the fields off the screen, processes, generates a response, sends the response, and ends, and so on and so forth.

    CICS and CGI apps so similar in fact that you could "webify" a CICS app with a simple gateway app that translates back and forth between CICS screen maps, and web pages.

    Indeed. As you say, "many" 3270-based applications were stateless -- I assume you refer principally to the client side, since you could (and I did, repeatedly) enforce state on the server side. Bisynch is a wonderful thing. None of this fancy socket stuff: power up, and you immediately have state. Power down, and you immediately lose it.

    I did come across one application with client-side state, though, and I suspect it represented what in those days would have been called a "pattern." There was a single, four-character, hidden field in the top right-hand corner of the screen which was unique to each form -- and, of course, since a 3270 terminal was pretty much hardwired, impossible to hack without some fairly sophisticated equipment.

    At the time, I thought this was pretty fucking stupid.

    And then I discovered cookies ...

  • (cs) in reply to xtremezone
    xtremezone:
    flukus:
    I'm always amazed there are so many people the would rather pirate Visual Studio than user one of the several arguably better IDEs/languages.

    If you don't want to pay the MS tax then use something else.

    That's not arguable. Visual Studio is the best IDE I've ever seen or used (Code::Blocks, Eclipse, KDevelop, NetBeans, others not even worth mentioning). There may be a better IDE out there, but I doubt it (and if there is it's probably not free). Besides, with the Express Editions many can use it legally for free.
    It's arguable.

    Indeed, it's a no-brainer.

    I'm using Visual Studio right now to port a rather large Unix system to W2K Server 2003. Apart from the usual niggling inconsistencies, which I remember as having been in the VS gene-pool for about the last ten years, it now has one more craptastic feature:

    The goddamn GUI crashes. Repeatedly. This pile of dung is just not scalable to real projects.

    Of course, when it crashes, it eats everything you've done for the last few hours. I believe 1970s IDEs like emacs have a feature to ameliorate this: it's called "auto-save." In fact, now that I come to think of it, I seem to recall Word providing a similar service. Not Visual Studio, oh no.

    On at least one occasion, VS2005 had the good grace to crash whilst "saving" the actual solution file. Result: one completely unusable solution file. Luckily I am minded to litter my enormous hard disk with tarred and zipped (what I'd like to do to Ballmer) files.

    And to add insult to injury, when it crashes, it springs back to life ... leaving some manky bit of non-GUI "servlet" process behind. Which locks half of the files. And requires me to log out (not that I'd ever be doing anything else useful on the server, of course) in order to wipe its little bottie clean.

    This is the best IDE you've ever seen or used?

    I think you're using the wrong goggles.

  • (cs) in reply to Anon Fred
    Anon Fred:
    6. Even a few from MIT. When I see "MIT" on a resume, I don't automatically hire them. I do, however, ask a very different set of questions. When asked "how long does it take to sort a list?" they better give an answer at least as good as "n log n" within ten seconds.
    A little harsh, there?

    First of all, if they can do better than "n log n," then I've got a job making quantum computers out of squeegee bottles for them.

    Secondly, you're cheating. Yes, you can dump the list into an array and sort it there, followed by re-linking it, but that's not really what you're asking, and I'm pretty sure that anybody coming to the question as posed, and able to provide that answer in less than ten seconds, would be a psychotic lunatic...

  • Anon Fred (unregistered) in reply to real_aardvark
    real_aardvark:
    First of all, if they can do better than "n log n," then I've got a job making quantum computers out of squeegee bottles for them.

    I meant the minimal answer to the "how long does it take to sort" question that I'd accept is something like "sorting a list? Oh, that's n log n, everyone knows that."

    There are better answers, like "well, assuming merge-sort or heap-sort, it's n log n." Or "radix sort allows order-n, but that's making some assumptions about the input data." Or "quicksort does n log n in the average case, but n^2 in the worst case." Or "quicksort used to be considered n^2 in the worst case but we can get worst case of n log n by spending extra time choosing our pivot."

    I don't necessarily expect people without degrees to know big-O notation, and I'll still hire them if they have other skills and the ability to learn.

  • Franz Kafka (unregistered) in reply to real_aardvark
    real_aardvark:
    Anon Fred:
    6. Even a few from MIT. When I see "MIT" on a resume, I don't automatically hire them. I do, however, ask a very different set of questions. When asked "how long does it take to sort a list?" they better give an answer at least as good as "n log n" within ten seconds.
    A little harsh, there?

    First of all, if they can do better than "n log n," then I've got a job making quantum computers out of squeegee bottles for them.

    Secondly, you're cheating. Yes, you can dump the list into an array and sort it there, followed by re-linking it, but that's not really what you're asking, and I'm pretty sure that anybody coming to the question as posed, and able to provide that answer in less than ten seconds, would be a psychotic lunatic...

    Perhaps he was looking for more depth? Personally, I'd prattle on about how nlogn doesn't capture things like sorting 100G of data in 1G of memory and how some things work best when the working set is smaller than the l2 cache, but that's just me.

  • (cs) in reply to Franz Kafka
    Franz Kafka:
    real_aardvark:
    Anon Fred:
    6. Even a few from MIT. When I see "MIT" on a resume, I don't automatically hire them. I do, however, ask a very different set of questions. When asked "how long does it take to sort a list?" they better give an answer at least as good as "n log n" within ten seconds.
    A little harsh, there?

    First of all, if they can do better than "n log n," then I've got a job making quantum computers out of squeegee bottles for them.

    Secondly, you're cheating. Yes, you can dump the list into an array and sort it there, followed by re-linking it, but that's not really what you're asking, and I'm pretty sure that anybody coming to the question as posed, and able to provide that answer in less than ten seconds, would be a psychotic lunatic...

    Perhaps he was looking for more depth? Personally, I'd prattle on about how nlogn doesn't capture things like sorting 100G of data in 1G of memory and how some things work best when the working set is smaller than the l2 cache, but that's just me.

    I forgot "n log n" the day after I used it on a final exam. Relevance is always important; minutia rarely is. If he wants a hire who can quote "n log n" on demand, then he will eventually find him. If, however, he wants a high-powered coder who consistently cranks out what the project requires, and if he uses that question to weed out all comers, he will reject the best candidates. How sad for him.

  • Anon Fred (unregistered) in reply to FredSaw
    FredSaw:
    I forgot "n log n" the day after I used it on a final exam. Relevance is always important; minutia rarely is. If he wants a hire who can quote "n log n" on demand, then he will eventually find him. If, however, he wants a high-powered coder who consistently cranks out what the project requires, and if he uses that question to weed out all comers, he will reject the best candidates. How sad for him.

    Why did you bother going to school?

    "n log n" isn't minutia you memorize in school. It's something you should just know. Like fire is hot.

    Like I said, I don't expect people who haven't gone through degree programs to know big-O notation, and I'll still make offers if they're good. They occasionally write n^2 loops but we can deal with that. I don't hold what they were never taught against them.

    And they didn't waste their parents tuition money, either.

  • Prosfilaes (unregistered) in reply to FredSaw
    FredSaw:
    I forgot "n log n" the day after I used it on a final exam. Relevance is always important; minutia rarely is.

    You forgot how long it takes to do one of the most common operations done in code right after the test? If you don't know how fast the basic algorithms run in big O notation, you'll can't figure out how fast your algorithm runs, or whether a sample big O value is good or not. That's not minutia; that's inability to use a powerful tool.

  • (cs) in reply to Anon Fred
    Anon Fred:
    Why did you bother going to school?
    At the time, in 1990, I was blinded by the delusion that computer science, like most other sciences, was a study in which you could constantly build upon your previous studies and eventually come to be a respected master by virtue of time and experience alone. I did not foresee that unlike the medical, financial, legal and similar professions, this one would prove to be one in which you must regularly discard what you have known and start fresh in order to keep current. 26 years of computer programming serve me nothing today other than some theoretical concepts. I no longer code in BASIC; I no longer code in assembler; I no longer code in OS-9; I no longer code in C; I no longer code in C++; I no longer code in COBOL; I no longer code in VB4, VB5 (97) VB6, or VB.Net. All the knowledge I once had of those languages is now useless.
    Anon Fred:
    "n log n" isn't minutia you memorize in school. It's something you should just know. Like fire is hot.
    Explain to me why I should know this. I have been coding since 1981. I went to college to get a degree in 1990. I used "n log n" in college, and have never used it before or since. Why should I know it like fire is hot? Where is it going to serve me?
    Anon Fred:
    Like I said, I don't expect people who haven't gone through degree programs to know big-O notation, and I'll still make offers if they're good. They occasionally write n^2 loops but we can deal with that. I don't hold what they were never taught against them.
    When/if the time comes that I ever encounter, in my daily software development duties, the need to use "n log n", I'll be sure to look you up. Hold your breath 'til then.
    Anon Fred:
    And they didn't waste their parents tuition money, either.

    I started attending college when I was 37. I was a single father raising two teenage children who lived with me. Their mother did not pay child support, and my parents did not pay tuition. I qualified for pell grants, and I earned scholarships, and I worked nights stocking a grocery store to see my way through.

  • 1710 (unregistered) in reply to Steve
    Steve:
    I started my career in the middle 1960s on a computer that didn't even have an operating system -- the IBM 1620 -- and things have gone downhill (in the industry -- not my career) since then.
    They live. http://hissa.nist.gov/mlists/ibm1620/199912/19991209-1.html

    And they had an OS. 3400032007013600032007024902402511131963600102

  • (cs) in reply to Prosfilaes
    Prosfilaes:
    FredSaw:
    I forgot "n log n" the day after I used it on a final exam. Relevance is always important; minutia rarely is.

    You forgot how long it takes to do one of the most common operations done in code right after the test? If you don't know how fast the basic algorithms run in big O notation, you'll can't figure out how fast your algorithm runs, or whether a sample big O value is good or not. That's not minutia; that's inability to use a powerful tool.

    We don't calculate on paper how fast our algorithms will run nowadays. We've written programs to check that for us.

  • nano (unregistered)

    If you don't know C or assembler, you're not a coder, you're a script kiddie.

  • (cs)

    Paul Simon: "...but I'll repeat myself, at the risk of being crude..."

    Anon Fred:
    Why did you bother going to school?
    Prosfilaes:
    If you don't know how fast the basic algorithms run in big O notation, you'll can't figure out how fast your algorithm runs, or whether a sample big O value is good or not. That's not minutia; that's inability to use a powerful tool.
    If he wants a hire who can quote "n log n" on demand, then he will eventually find him. If, however, he wants a high-powered coder who consistently cranks out what the project requires, and if he uses that question to weed out all comers, he will reject the best candidates. How sad for him.

  • etr (unregistered)

    I'd expect someone with a CS degree and pursuing development work to know of big O notation, but I quite frankly wouldn't expect someone to know all the sort algorithms and the Big O notation of each. I would like him or her to know that you can get a generalized sort in O(n log n), and at least one algorithm for doing that, but I wouldn't necessarily expect them to recall the full gamut of algorithms presented in class.

    While I don't entirely dismiss the argument that we should know all the sort algorithms and their Big O's--given that they were a major topic of our schooling--the fact of the matter is that developers in many areas shouldn't be spending much time on sorting anymore. While sorting remains a common operation in software, a strong developer should realize that common operations should be handled by common code, rather than being implemented ad-hoc.

    To be fair, in some specialties the ability to recognize that a given data stream meets the requirements for an O(n) is extremely useful. However, in other areas such situations are sufficiently rare, sufficiently unreliable, sufficiently unimportant, or some combination of these that it makes sense to simply apply a good generalized sort.

    For developers working in the later specialties (in particular, those dealing with business data), it makes good sense for them to implement a good sort algorithm once. In a situation like this, the developer's memory is better occupied with information relevant to the problems he or she will need to deal with regularly, rather than with sorting, which he or she will deal with once.

    While I certainly think seasoning is a good think in the development field, I think slapping any arbitrary time on what it takes to become a "senior" developer is silly. Frankly, the arguments I've seen that one has "seen it all" or "done it all" over the course of ten years only serve to underline this fact. If you think you've seen and done it all, you think you'll never see or need to do anything new. What use would there be for a senior developer if all he's prime for is doing what he's already done? Either he or she has already written the software you need, or he's no longer a senior developer when something he hasn't done arrives.

    None if this is meant to disparage the position of senior developers or those who hold it. My point is that the role by its nature is going to require those performing it to step outside their comfort zones--"cowboying", as it were.

  • _olly (unregistered)

    Sounds like a little software company I use to work for, I will call them Littl Box Software. This is an e-mail that a fellow co worker (_anya) and I put together.

    “The idea is make a modified Jenga block set and create a game based off our little software company.

    We could have generic categories, some specific categories, label some of the extra pieces "upgrades"(need tons of upgrade blocks in all kinds of shapes that never really fit), "fixes", "patches", "tax updates", "custom reports", "consulting fees", etc.

    The instructions for the game will not come with the game, you will find out that there are instructions after about the 50th call then you will have to request the instructions be snail mailed to you. The instructions will consist of an incomplete document riddled with mistakes, mis-spellings, grammatical errors, and pages marked "This Page Intentionally Left Blank", etc.

    For custom Crystal Report Blocks; you will have to wait a period of no less than 6 months, but up to 2 years, if still not complete, wait longer! Whereas you will be charged, $250 for the license fee to use these report blocks you will not have. For an additional $700, we will provide training for creating your own custom report blocks by an unlicensed, uncertified, improperly trained professional online.

    This training is on a version not supported by the manufacturer and there is no cd or book that comes with it. Upon upgrading to version 11, another fee will be involved to be determined at a later date.

    The box you will receive will contain very old looking warped blocks that don’t seem to work well with other blocks, these are custom made by the owner and there is no way to play the game without them because they create the foundation and it would hurt his pride if we removed them.

    If you are a female you already have lost because how could the simple minds of a female ever understand the complexities of block staking.

    If for some reason you can not get the game to work you can wait 6 months and the owner will call you and explain to you how stupid you are for not being able to work this very simple design. He will show you how easy it is virtually while never stopping to give you time to understand the very simple instructions that will take 72 hours to explain. Would be 48 but he has to get some drinking time with his block builders in sometime, but don’t worry he will have one of his staff take over at 4:50 pm on Friday without leaving them any kinds of instructions on what you have spoken about.

    But wait, order now and receive our custom, opaque, Tell-All Instruction Ball™ (magic 8 ball) used by our highly skilled technical support staff. This will provided you with answers in a timely manner without spending time frustrated or on hold.

    The Tell-All Instruction Ball™ includes such exciting options as; "restart", "upgrade", and "rebuild". Shaking the Tell-All Instruction Ball™ will not provide you with better answers so please be gentle with it.

    The only known side effect of this game is Tourettes Syndrome. Please be advised.

    Thank you and have a great day!

    Your local, but difficult to get a hold of, support staff! If we are a little grumpy understand our checks bounced again and we don’t feel like helping you at the moment."

    …. We were very frustrated this day but this is not even half of the problems we had there, we left out requiring our customers to buy not exactly legal software, and so much more but I am sure I have given enough away.

  • Homer (unregistered)

    Assholes...

    That is one of the fundamental problems with our industry...

    Any asshole who can write a macro can call himself or herself a programmer...

  • Anon Fred (unregistered) in reply to FredSaw
    FredSaw:
    I no longer code in BASIC; I no longer code in assembler; I no longer code in OS-9; I no longer code in C; I no longer code in C++; I no longer code in COBOL; I no longer code in VB4, VB5 (97) VB6, or VB.Net. All the knowledge I once had of those languages is now useless.
    A CS degree isn't supposed to teach you a language, just like law school isn't supposed to teach you a Lexis-Nexus search, or medical school isn't supposed to teach you how to operate an MRI.

    Those are skills you need in the field, obviously, and your school might have a clinic one evening to teach you this stuff. But the professors should know that tools come and go. (AFAIK, if you ever wanted to learn C at MIT -- even when it was the most popular language in the "real world" -- you had to take classes outside of the EECS department, or attend a student-run seminar.)

    FredSaw:
    Explain to me why I should know this. I have been coding since 1981. I went to college to get a degree in 1990. I used "n log n" in college, and have never used it before or since. Why should I know it like fire is hot? Where is it going to serve me?

    You have 1000 rows in your database. How long is it going to take for it to sort them? What if you have 10k rows? 100k?

    FredSaw:
    When/if the time comes that I ever encounter, in my daily software development duties, the need to use "n log n", I'll be sure to look you up. Hold your breath 'til then.

    I've said a few times that lots of people without degrees have very good careers. You can probably get by without it, but it's a shame that you're missing such a fundamental piece of knowledge.

    FredSaw:
    Anon Fred:
    And they didn't waste their parents tuition money, either.

    I started attending college when I was 37. I was a single father raising two teenage children who lived with me. Their mother did not pay child support, and my parents did not pay tuition. I qualified for pell grants, and I earned scholarships, and I worked nights stocking a grocery store to see my way through.

    That was a low-blow on my part and I apologize. Being a good father is vastly more important than big-O notation.

    But I think back to one of my first real-world projects. It was your basic three-tier architecture, and we noticed that the UI was opening more and more connections to the core. We asked the person writing the UI (who was a decade or two older, and who was supposedly teaching CS at the local community college) if the number of connections was bounded. He blinked a few times and said "yes." We tried again and asked "will the number of connection be below some constant? Because we're seeing 30 right now."

    "Yeah, it won't be much more than that."

    "Okay, so, like... no more than 50?"

    "Yeah. Well, unless the user opens this page of the UI."

    "Okay, so, then... no more than 70?"

    "Yeah. Well, unless the user does this..."

    "Can you say it'll be less than 100?"

    "Maybe. I dunno."

    All he needed to know was what "constant time" or "constant space" was. But he didn't. And his code reflected it.

  • Anon Fred (unregistered) in reply to etr
    etr:
    I'd expect someone with a CS degree and pursuing development work to know of big O notation, but I quite frankly wouldn't expect someone to know all the sort algorithms and the Big O notation of each. I would like him or her to know that you can get a generalized sort in O(n log n), and at least one algorithm for doing that, but I wouldn't necessarily expect them to recall the full gamut of algorithms presented in class.

    Yeah, I wasn't looking for in-depth knowledge of all the different sorts. There were so many, but knowing that the best you can do in general is O(n log n) is a big takeaway.

    Certainly it's very rare to have to write your own sort functions, although when I'm learning a new language I always try implementing quicksort. My implementation usually isn't as fast, which is a good lesson about trying to reinvent wheels.

    Imagine trying to find out if a big list has any repeats. (I realize most libraries implement this for you, I'm using it as an example.) Without big-O, someone could easily do this:

    for i in list
      for j in list
        if i == j then print "REPEAT";
    

    You don't need to be able to write out a proof of that routine to know what's wrong with it.

  • (cs) in reply to nano
    nano:
    If you don't know C or assembler, you're not a coder, you're a script kiddie.
    And if you rely entirely on C and assembler, you're not a coder, you're a wannabe hardware weenie. Without the pipelining. And the caching. And all the rest.

    This is a ridiculous statement. I no longer program in C or assembler, though I have done both, extensively. I am yet to be convinced that these are even necessary skills on a small footprint, real time (and I mean real time, not bleeding "real time Java" or MS eVC3) system.

    We could argue all day about the relative "un-script-kiddiness" of C++, Java, VB.Net and C# -- in relative order of birth -- or even of Perl, Python, Ruby ... drones on and on ... but what's the point? Script kiddies, by definition, play with broken bits of javascript and PHP4 and the like that they've snarfed off the web, and then made them worse by ill-judged and ignorant decisions.

    You want a real language test for "script kiddies?"

    Try Lisp.

  • (cs) in reply to _olly
    _olly :
    Sounds like a little software company I use to work for, I will call them Littl Box Software. This is an e-mail that a fellow co worker (_anya) and I put together.

    “The idea is make a modified Jenga block set and create a game based off our little software company."

    <snip>Look upwards</snip>

    The only known side effect of this game is Tourettes Syndrome. Please be advised.

    Thank you and have a great day!

    Your local, but difficult to get a hold of, support staff! If we are a little grumpy understand our checks bounced again and we don’t feel like helping you at the moment."

    …. We were very frustrated this day but this is not even half of the problems we had there, we left out requiring our customers to buy not exactly legal software, and so much more but I am sure I have given enough away.

    Solution: Admit defeat two weeks into this pile of crud.

    Comply with all requirements at work, but do the minimum (within ethical reason) to get it to pass the tests to "go into production." Do not burn out.

    Take the real requirements off to one side and build the proper version yourself. Including documentation, test scripts, and everything. (You might have to blag licenses, I guess.)

    Wait six months until the original abortion falls apart at the seams and somebody walks up to you and says something like (and I know it's not on-line Jenga, but you get the point):

    Her: "I've tried pressing F6 to delete this configuration entry, but it's still there." Me: "That's because F6 doesn't do anything." Her: "Then how do I delete this configuration entry?" Me: "Look, I've got another screen over here. Want to try pressing F6?" Her: "OK. Wow, it works. And I like the way the columns have re-sorted themselves!" Me: "Great! Why don't you tell your boss about it?"

    And this is how the Muff-Dive application came into being. Well, I'm not necessarily proud of it, but if you'd had to spend six months of your spare time at work rewriting an application and being forced by company policy to give it a four-letter acronym, then you'd probably pick MFDV as well.

    Customer Support is great, in my opinion. And the best thing about them is that, in half-way reasonable circumstances, they rely on customer support themselves.

    Otherwise they're screwed.

    It's only the idiots around you in the technical and management arena that you need to worry about.

  • (cs) in reply to Homer
    Homer:
    Assholes...

    That is one of the fundamental problems with our industry...

    Any asshole who can write a macro can call himself or herself a programmer...

    Define "macro."

    No, wait, define "fundamental."

    Hang on a sec: you've already defined "Asshole."

  • Jeremy (unregistered) in reply to KattMan

    Actually, I have confidence in this Garret guy, let me tell you anybody that has enough drive to jump in and learn has potential. Hell that's exactly how I started and I am now a Director of Development.

  • The guy that submitted this story (unregistered)

    I know people may not trust that I'm the guy that submitted this story... that's for you to decide...

    However, decide for yourself. I have posted what I ACTUALLY submitted on an anonymous blog, so people can see the real story!

    http://evenworsethanfailure.blogspot.com/

    I think that after seeing how things are twisted by the site authors, I will simply stop coming to this site... the stories here are not real... they are dramatically changed by the site authors to make them nothing more than fiction.

    Captcha: craaazy

    Youbetcha.

  • mushroom (unregistered)

    Who hasn't had a boss like that.

  • (cs) in reply to The guy that submitted this story
    The guy that submitted this story:
    I know people may not trust that I'm the guy that submitted this story... that's for you to decide...

    However, decide for yourself. I have posted what I ACTUALLY submitted on an anonymous blog, so people can see the real story!

    http://evenworsethanfailure.blogspot.com/

    I think that after seeing how things are twisted by the site authors, I will simply stop coming to this site... the stories here are not real... they are dramatically changed by the site authors to make them nothing more than fiction.

    Captcha: craaazy

    Youbetcha.

    Wow.. I knew this site changed things around but I didn't think it was THAT much changed around. Just wow. I'll view anything I read here with a grain of salt from now on.

  • (cs) in reply to real_aardvark
    real_aardvark:
    First of all, if they can do better than "n log n," then I've got a job making quantum computers out of squeegee bottles for them.
    The efficiency of radix sort is 1+floor(log_b(v)), where v is the maximum magnitude of the input numbers and b is the base of the numbers.

    Provided v is constant, radix sort is O(n).

    So, about those squeegee bottles... :p

  • (cs) in reply to Anon Fred
    Anon Fred:
    A CS degree isn't supposed to teach you a language, just like law school isn't supposed to teach you a Lexis-Nexus search, or medical school isn't supposed to teach you how to operate an MRI.
    I understand. I chose bad examples. But my college courses did little to provide me with enduringly useful knowledge. My Unix classes? Uh... no... my employers have consistently used Windows OS. My Advanced Data Structures classes? No... those data structures and more, better, are already provided as part of the C# classes. I don't have to know how to create them from scratch; I just have to know the namespace to get to them.
    Anon Fred:
    You have 1000 rows in your database. How long is it going to take for it to sort them? What if you have 10k rows? 100k?
    Ask SQL Server. Or google it.
    Anon Fred:
    I've said a few times that lots of people without degrees have very good careers. You can probably get by without it, but it's a shame that you're missing such a fundamental piece of knowledge.
    I'm not missing it. I tossed it as unnecessary. Think of it as being like when you're admiring "Starry Night" but you don't need to know what was going on in Van Gogh's head when he cut off his ear.
    Anon Fred:
    That was a low-blow on my part and I apologize. Being a good father is vastly more important than big-O notation.
    Thank you. Apology accepted.
  • (cs) in reply to Anon Fred
    Anon Fred:
    That was a low-blow on my part and I apologize. Being a good father is vastly more important than big-O notation.

    But I think back to one of my first real-world projects. It was your basic three-tier architecture, and we noticed that the UI was opening more and more connections to the core. We asked the person writing the UI (who was a decade or two older, and who was supposedly teaching CS at the local community college) if the number of connections was bounded. He blinked a few times and said "yes." We tried again and asked "will the number of connection be below some constant? Because we're seeing 30 right now."

    "Yeah, it won't be much more than that."

    "Okay, so, like... no more than 50?"

    "Yeah. Well, unless the user opens this page of the UI."

    "Okay, so, then... no more than 70?"

    "Yeah. Well, unless the user does this..."

    "Can you say it'll be less than 100?"

    "Maybe. I dunno."

    All he needed to know was what "constant time" or "constant space" was. But he didn't. And his code reflected it.

    Basic three-tier architecture? Basic? Roll up, roll up, folks, and fling ping-pong balls at the goldfish bowls.

    In Dorothy Parker terms, you have so far covered the gamut from 1 to less than 100.

    If I can try to summarise FredSaw's position, he appears to me to be entirely correct in stating that "someone else has done this before you." Pick the correct fucking algorithm, or library, or whatever. Not a good interview question, especially when you get the basics wrong.

    Anon Fred:
    I meant the minimal answer to the "how long does it take to sort" question that I'd accept is something like "sorting a list? Oh, that's n log n, everyone knows that."

    There are better answers, like "well, assuming merge-sort or heap-sort, it's n log n." Or "radix sort allows order-n, but that's making some assumptions about the input data." Or "quicksort does n log n in the average case, but n^2 in the worst case." Or "quicksort used to be considered n^2 in the worst case but we can get worst case of n log n by spending extra time choosing our pivot."

    Try again.

    It's a list.

    Lists are not amenable to quickies, radices, bubblies, or whatever. You can dump them into a more sortable "container" (whatever), but they don't sort too well.

    I am actually pathetic enough to think about this, and I can imagine a requirement to dump a list into an array and sort it via some variety of pivot. It's pretty contrived, though. If you want to sort it, use an array in the first place. Or a hash-table.

    Sorting a list is just so not "n log n".

    Sorry.

    Interesting that you would fail somebody from MIT for failing to answer a stupid question, but you'd accept that from somebody who went to Podunk Community College, though.

    What did you say your company name was? Times are difficult. I need to find a stock I can short.

    Franz Kafka:
    Perhaps he was looking for more depth? Personally, I'd prattle on about how nlogn doesn't capture things like sorting 100G of data in 1G of memory and how some things work best when the working set is smaller than the l2 cache, but that's just me.
    Heh. That's so, so, far beyond this guy, Franz.

    Want to tell him about Knuth?

  • J Walston (unregistered) in reply to The guy that submitted this story
    The guy that submitted this story:
    I think that after seeing how things are twisted by the site authors, I will simply stop coming to this site... the stories here are not real... they are dramatically changed by the site authors to make them nothing more than fiction.

    Huh? So... you're upset that you were painted as a programming amateur? The stories are the same, except Alex's is entertaining and yours reads like a disgruntled employee.

    In your blog, you claim to be "very well-versed in PHP and MySQL", yet only said you had "some PHP experience" in your story. A big difference there.

    What I can't figure out is how could such an experienced expert take a job for 22k?

  • (cs) in reply to Jeremy
    Jeremy:
    Actually, I have confidence in this Garret guy, let me tell you anybody that has enough drive to jump in and learn has potential. Hell that's exactly how I started and I am now a Director of Development.
    Great! Good for you, and I think I speak for everybody at WTF Incorporated.

    Now go and make your momma proud.

    Get a real job before you're thirty, and over the hill.

  • (cs) in reply to Ragnax
    Ragnax:
    real_aardvark:
    First of all, if they can do better than "n log n," then I've got a job making quantum computers out of squeegee bottles for them.
    The efficiency of radix sort is 1+floor(log_b(v)), where v is the maximum magnitude of the input numbers and b is the base of the numbers.

    Provided v is constant, radix sort is O(n).

    So, about those squeegee bottles... :p

    Well, as usual, I'm opening myself up to ridicule here.

    Can you do a radix sort on a list?

    How often, in real terms, can you assume that v is constant?

    And how would you answer anon fred's hypothetical question in an interview?

    We're two-thirds of the way there. You've got the radix sort, I've got the squeegee bottles...

    ... All we need now is the quantum computer.

    And we'll be rich! Rich, I tell you!

    Well, maybe not so rich as the Belgian royal family, but that was just nasty.

    We'll be rich in a good way, and I love you.

  • (cs) in reply to etr
    etr:
    I'd expect someone with a CS degree and pursuing development work to know of big O notation, but I quite frankly wouldn't expect someone to know all the sort algorithms and the Big O notation of each. I would like him or her to know that you can get a generalized sort in O(n log n), and at least one algorithm for doing that, but I wouldn't necessarily expect them to recall the full gamut of algorithms presented in class.

    Dude, you need to buy a clue. Big O is so far down below what those of us in the trenches are dealing with nowadays. We don't have to create a sort; it's done for us. We don't have to create classes; they're done for us. Are you living in the 1970's? Let me tell you what I am studying these days.

    • Team Foundation System
    • Windows Communication Foundation
    • Ajax
    • SQL Server Reporting Services
    • Silverlight

    No offense, but this stuff is pretty much leaving Big O in the dust.

  • Lee Jackson (unregistered) in reply to Anon Fred
    Anon Fred:
    You have 1000 rows in your database. How long is it going to take for it to sort them? What if you have 10k rows? 100k?

    I lol'd when I saw this! The next time someone asks how long a report is going to take to generate, Ill be sure to tell them "O(n log n) if were lucky but it may just take O(n^2) since I didn't write the database" rather than my usual "About 30 minutes because our servers are busy fossilizing"

    While I get your point, haven't we LARGELY moved on from this? Realistically, just what percentage of coders are having to write their own sorting methods (I differentiate of course between "having" and "do")? Personally I haven't HAD to write one in...10 years?

    My point being, yes understanding algorithmic complexity IS essential in some roles, but for the most part performance has LONG since slipped from our fingers (for the common good IMO) whether it be to the STL, .Net or any number of third party apps/libs (and yes while OS might afford the luxury of access how often do we realistically have time to fix those problems). I cant help but think we might be largely better off if universities actually taught software "development" as well as "engineering" since I consider both to be equally valid but totally different disciplines (of course the CS majors will spit on the engineering majors who will then have the developers to spit on....much as it is now even though each bring their own bundle of tricks to the table).

    What do I know though. As I once said, I cant even implement a linked list off the top of my head...(beware)

  • nameless (unregistered) in reply to Lee Jackson
    Lee Jackson:
    Realistically, just what percentage of coders are *having* to write their own sorting methods (I differentiate of course between "having" and "do")? Personally I haven't HAD to write one in...10 years?

    In day job I think I've never had to write own sort algo. But, surprisingly enough, I have had to write sorting algo in my "hobby" code. I'm coding C64 game (old habits die hard) and needed to sort sprites for sprite multiplexer. So I ended up writing some kind of insertion sort for it in 6502 asm :)

  • (cs) in reply to nameless
    nameless:
    So I ended up writing some kind of insertion sort for it in 6502 asm :)
    Wow, you go, dude! Took me right back to 1984 and 6809 assembler. Those were the days!
  • Ringo (unregistered) in reply to saywhat

    Visual Studio is only free if you use the crap "lite" version, or some of the really old "embedded" versions. The "lite" version is great if you're a student, or working on a hobby, but most "real" development requires a for pay version.

    http://www.amazon.com/Microsoft-Visual-Studio-Standard-2005/dp/B000BT8TRQ

  • (cs) in reply to real_aardvark
    real_aardvark:
    Can you do a radix sort on a list?
    Depends on the internal representation of said list. Array? Linked list? Hashtable? It really doesn't matter all that much though, as most (maybe even any?) list types can be transformed into a flat array and back in O(n) time, which conveniently coincides with the lower bound for a radix sort.
    real_aardvark:
    How often, in real terms, can you assume that v is constant?
    Iirc radix sort is used internally for depth sorting algorithms on graphics cards, where indeed v can be made constant (or atleast; a constant amount of different constants) by cleverly picking the numbers' base.
    real_aardvark:
    And how would you answer anon fred's hypothetical question in an interview?
    "In the general case sorting can happen in O(n log n) using MergeSort, but a better average case result can be gotten using QuickSort. For specific situations you can get as good as O(n) time using algorithms like RadixSort."

    I'd sort of be lying if I'd say it like that though. In the spur of the moment I'd probably stick to mentioning QuickSort as being O(n log n).

  • (cs) in reply to Ragnax
    Ragnax:
    real_aardvark:
    Can you do a radix sort on a list?
    Depends on the internal representation of said list. Array? Linked list? Hashtable? It really doesn't matter all that much though, as most (maybe even any?) list types can be transformed into a flat array and back in O(n) time, which conveniently coincides with the lower bound for a radix sort.
    real_aardvark:
    How often, in real terms, can you assume that v is constant?
    Iirc radix sort is used internally for depth sorting algorithms on graphics cards, where indeed v can be made constant (or atleast; a constant amount of different constants) by cleverly picking the numbers' base.
    real_aardvark:
    And how would you answer anon fred's hypothetical question in an interview?
    "In the general case sorting can happen in O(n log n) using MergeSort, but a better average case result can be gotten using QuickSort. For specific situations you can get as good as O(n) time using algorithms like RadixSort."

    I'd sort of be lying if I'd say it like that though. In the spur of the moment I'd probably stick to mentioning QuickSort as being O(n log n).

    And you're correct. I don't even think we're disagreeing at any point, although you can probably dredge up some piece of drunken nonsense that I wrote on one of these posts.

    My original point was that, strictly speaking, sorting a list is not O(n log n). Sure, you can transform the list. Sure, you can transform the sort back into a list. It just ain't O(n log n), though.

    Now, this doesn't matter when you're dealing with a linked list of ten million or so thingies, and it doesn't matter if you have an infinite amount of memory (preferably RAM) into which you transform those thingies, purely in order to hit the celestial management goal of O(n log n).

    It certainly matters if you don't have the memory.

    It even (potentially) matters if you're dealing with a smaller data set, say n = 1000.

    In this case, you're paying for O(n log n), plus a Kn conversion to an array (or whatever) and a Kn conversion back again. You can ameliorate this expense by allocating the array in one huge block, but you can't get away from the initial item-by-item copy -- without dicking around with pointers -- and you certainly can't get away from resuscitating a list from the sorted array.

    Yes, you can write a big, spiffy, wrapper around an STL list (or non-C++ equivalent), and you can re-use the original list, since you know the sorted result will be the same size. However, this will blow up. Almost certainly.

    The simple solution is to go back to the design, and replace "list" with "vector."

    And, if you choose to go with a list in the full knowledge that you can always transform it into an array and back again, then that's fine. Until you have to push a new item at the front or back and sort it again. Repeatedly. I don't deal with abstractions; I deal with the real world, and collections of 1000-odd objects are quite typical. Pick the wrong data structure, and you're fucked.

    But, as I say, we both seem to agree on the basics here.

    Much though I hate to disparage Fred Saw, I have to say that it is definitely important that anyone you employ knows about this stuff. Fred has a list of five technologies (for want of a better word, and I'm not beating on MS here) that save him from thinking about n log n.

    But do they?

    How do you know?

    And I'm still fascinated by the idea that whoever it was would require a (hugely) different standard of algorithmic theory from an MIT graduate rather than a street-sweeper with a junior college qualification in Access. Did he have a really bad time at MIT? This is just bizarre.

    OK, I kinda forgot the radix sort thing. But I think the principle still stands.

  • Raison de Calcul (unregistered)

    I had a boss like this at a pizza place. These people have no souls. Empirically, even.

  • Anon Fred (unregistered) in reply to real_aardvark
    real_aardvark:
    And I'm still fascinated by the idea that whoever it was would require a (hugely) different standard of algorithmic theory from an MIT graduate rather than a street-sweeper with a junior college qualification in Access. Did he have a really bad time at MIT? This is just bizarre.

    I expect people to live up to their opportunities.

    It's much more likely that you'll find your MIT graduate is too heavy on theory and insufficient on practice, though.

  • (cs)

    PUBLISH THE COMPANY'S NAME!! PUBLISH THE COMPANY'S NAME!! PUBLISH THE COMPANY'S NAME!!

    And shop them to Microsludge while yer about it!!

  • The guy that submitted this story (unregistered) in reply to KozMoz
    KozMoz:
    PUBLISH THE COMPANY'S NAME!! PUBLISH THE COMPANY'S NAME!! PUBLISH THE COMPANY'S NAME!!

    And shop them to Microsludge while yer about it!!

    Ya know, I'd love to "come out" and identify myself, the company name, location, etc... but seriously when the guy canned me, he gave me a letter that pretty much threatened legal action if I did anything to him or his company... you know, your standard "thank you for bringing my company out of severe debt" type of goodbye... sigh

    The guy was, and probably still is, a litigious bastard... I'd rather not risk that.

    http://evenworsethanfailure.blogspot.com/2007/11/worsethanfailurecom-got-it-all-wrong.html

  • Zaphodforpresident (unregistered) in reply to LTO_Moe

    This may be the most insightful "X type of people" philosophy I've ever seen. Is it original? It sounds vaguely familiar to me.

  • vb dude (unregistered)
    The Programmer:
    ...This actually works because the boss takes part responsibility for communication issues. You need to prime this first however, with "what does that actually mean?" and "can you give me written specifications?".

    This is the best comment of all. It's not about skill, knowledge or talent but really all about formal communications, especially with bosses that are not educated as programmers.

    All requests are should be documented from him/her and not verbally issued. An uneducated boss can't dispute this and an educated one should be doing this because there are/will always be others that will be on the "team" and it's won't become personal and egotistical as it did in the story.

  • Memomachine (unregistered) in reply to Franz Kafka
    Franz Kafka:
    Perhaps he was looking for more depth? Personally, I'd prattle on about how nlogn doesn't capture things like sorting 100G of data in 1G of memory and how some things work best when the working set is smaller than the l2 cache, but that's just me.

    My answer would be:

    When the computer thingy is finished.

    Seriously. In an age of frameworks and toolsets how many times are there opportunities to write yet another sort routine? And with wide possible variances in terms of available memory, disk thrashing, the size of datasets and the actual implementation of sorting in the framework or toolset. Really is there any way to really know?

    And just how useful is N log N? Any more useful than my answer? Not really.

Leave a comment on “It’s How Everyone Builds It”

Log In or post as a guest

Replying to comment #:

« Return to Article