Subj : Re: programming job market in bay area in US To : comp.programming From : rem642b Date : Fri Jul 29 2005 07:02 am > From: CTips > if I told someone, write a translator from Swahili to > Esparanto, he'd go off and *try and do it*. If I were hiring somebody, I'd rather the person decline tasks for which the person is grossly unqualified. For example, I have no knowledge of Esperanto (except I spell it correctly) hardly at all, certainly not enough to be able to debug my translator by knowing what is correct and what is not correct Esperanto output. But if you want Esperanto translated to English, I'd be glad to give that a try. I can use BabelFish to give a crude translation, so I at least have some idea what the Esperanto is trying to say, and I check that against the context of the conversation just to make sure I got the meaning right, then I make my program produce nice clean English with the same meaning. > We tend to hand people large assignments for which they may have very > little of the background, and expect them to get things done with > little oversight, ... I really really really hope you're not so foolish as to assign somebody, who has no prior knowledge whatsoever of a particular foreign language, to somehow write a program that correctly translatest *to* that lanaguge, and expect to get any decent result from that mistake. > 2 specialized knowledge related to the field the company is in. In our > case, this involves systems programming There was a thread about that term a few months ago. That term can mean any of a wide range of different things, from simply writing utility tools such as grep, to writing operating systems, to writing device drivers, etc. I have experience fixing bugs in a COBOL compiler that was written in assembly language. I have experience writing interrupt handlers for a standalone micro-processor computer that didn't have any operating except the interrupt handlers that I wrote myself. Once I configured a new device handler for some big operating system, by copying a general template for device drivers on that kind of system (I think it was RSX-11M) and then reading the technical documentation for the particular device to see where the status and control bytes were in memory-mapped I/O space and what each bit or group of bits meant and what the state changes were for that device, and then I hand-coded assembly language to fill in the code for INIT and start-read and start-write and handle-read-interrupt and handle-write-interrupt etc., something like that anyway, it was a long time ago and I don't remember which device it was much less the details of the routines I had to hand-code in the template. I've written a large number of low-level utilties to aid programming etc., such as a program to study the parse tree of a large program and compile a table of which functions call which other functions and reference which global variables, and detect any mis-matched stuff such as wrong number of arguments or undefined variables etc. I've also written some really essential utilties, although nobody thought they were essential until they tried them and got spoiled. For example I wrote a nice text formatter a few years before Knuth came out with TeX, and in some ways it is better than TeX because you express your math as nested expressions instead of as explicit superscript/subscript motions, and my program figures out all the relative placement automatically. Some people used my program to produce much nicer formatted mathematics and C.S. documents than anything anyone was doing at the time. I also wrote packet communication protocol for three micro-processors (6502, 8080, 68000) and two classes of mainframes (PDP-10 (Lisp and Algol) and Unix (C)). Would any of that qualify as "systems programming"? > extensive knowledge in one area other than systems programming I have extensive knowledge/experience in lots of different areas, too many to list here. Try a game of reading some context about some of my various accomplishments and guessing the missing word: http://shell.rawbw.com/~rem/cgi-bin/topscript.cgi Select the radio button for "Random words from file" then click "Start the demo ..." Press back button on browser each time you get one example correct and want to try another. > - prior projects completed, with weight given to projects done solo or > as part of a very small team Most of my projects have been solo by myself or solo under a supervisor who brainstormed with me, but one project had a total of appx. ten employees: myself and two other programmers, one programmer/supervisor, one academic advisor, two or three curriculum authors, one chairman of the whole department who checked in once in a while but didn't get involved in anything except hosting group meetings about once a month and asking us how the project is going about once a week when he'd see us in the halls, and occasionally one or two other people working on short-term tasks. I had another similar-sized open-source project consisting of about five programmers each implementing the packet protocol on a different kind of machizne, plus one non-programmer (Dave Caulkins) who hosted our protocol-design meetings and three experts in the field (Peter Deutsch, Mike Wilber, and Doug Bourne) who helped us design the protocol then disappeared. The experts wrote the first drafts of the documentation, then I wrote all the rest of the documentation including tutorials and test data and ideas for usage etc., and in the course of my development and documentation and testing I discovered what I called the "Last ACK dilemma" which I see is now an officially recognized problem but I thought of it first and documented it first about 25 years ago and came up with the only two decent solutions. > - we want to test algorithmic knowledge, so we'll give some problems > and expect O(N), O(NlogN) and O(N^2) solutions to the problem. Not to mention solutions whose average behaviour with random data is n*log(n) but whose worst case is n^2, like that sucker sorting algorithm in the C library, that one where you pick some element and partition all the other elements as to less than or greater than the one you picked, then recurse on the two partitions, where I can trivially create worst-case starting data regardless of whether you use a fixed element or medium of three elements or any other fixed algorithm you want for picking the pivot element. Then 90% of the hash-resolution methods listed in the textbook are crap, like the one where you follow this complicated path instead of just stepping linearily, but every resolution path through any given bucket then follows exactly the same sequence afterward, so the collision pileups (as in fog-highway auto crashes) are just as bad as with linear chaining except it's impossible to diagnose it by looking at the printout of busy vs. empty buckets because the traffic pileups aren't in consecutive locations so it looks like there's nothing wrong. > A recent one was (for someone who had done a > project on TCP/IP) how would you identify the bottleneck in the path > between two machines? Do you mean predict ahead of time based on a priori data about the different machines and the path and the expected data rate, or do you mean recognize from realtime data when it's actually happening by noticing that a certain class of buffers is getting horrendously full, or do you mean anticipate the buffer-full condition so you can write a supervisor program which will automatically detect the bad condition and automatically alert somebody to come notice it and perform some administrative task to relieve the situation such as purchasing extra bandwidth on the spot market (or even better, have the daemon automatically contact eBay to purchase the extra bandwidth when needed, providing the spot price isn't too high), or do you mean given that everyone knows there's a bottleneck between 2PM and 5PM every TuWTh, diagnose exactly what detail is causing it and how best to devise a strategy for reconfiguring resources so next week it won't happen? (I'm your middlemanager, who inquires what you really want solved, so I can then pass the word to the actual netwhiz so he works on the problem you want solved instead of some other problem he finds more interesting so he's quite willing to mis-interpret your original posting to be that instead of what you really want.) .