Discussion on:
bITs and blogs
View:
Show:
" An e-mail reply assumes the recipient has written / read the previous material. Why would they want to scroll through it when they can just read the top? "
Dude, Palmetto, normally you seem to be a reasonably intelligent and aware individual, but — WTF, y0?!
Are you just choosing to repeatedly ignore the incessant references to cropping ?!
For " Yes, I do have to start from the bottom, but I find that more convenient than having to open and close multiple messages " I have this to say: digest mode . It's designed for people like you, and it gives you messages in a logical, top-to-bottom order. Furthermore, it doesn't inconvenience those of us who don't want an inbox full of emails that all contain the same conversation repeated over and over again with "I agree" tacked onto the top several times .
" Then I would have to keep all previous messages in case I cropped something that later turned out to be important. "
Yeah? Oh, the horrors! You poor thing. Perhaps nobody ever told you that's what those "folders" are for in your clunky-ass GUI email client that crashes every sixth Tuesday. Searching through them is easily accomplished with that handy-dandy little "search" thingie in the drop-down menus. Do you really expect me to sympathize with someone who makes my life more annoying because he can't be bothered to use the basic functionality of his email client ?
" Or I could (and do) top post and make life easier as a sender / forwarder. "
Sure. For some definition of "easier". You also make it more difficult in other ways. Whatever, you have that right. Where that "right" breaks down is when you are making things more difficult for others. Courtesy, respect, and doing things in a logical manner, folks. Consider the other guy for a change. Top-posters get along great with other top-posters. They don't get along so well with inline-posters, and they get along pretty much not at all with bottom-posters. The only people linline-posters and bottom-posters tend to have difficulty getting along with are top-posters. They get along fine with each other. This should serve as a lesson to those who pay attention, as should the fact that many of us, when encountering a discussion that runs in reverse friggin' order , simply throw the crap away and figure if it's important someone will say it again.
That probably goes on more than you realize.
I'm not ignoring your references to cropping. I don't understand why I should go to the additional trouble when top-posting works satisfactorily for me, and apparently everyone else here except you. Excuse my bottomless pool of ignorance. What's "digest mode"? I know how to create folders, and do. But I don't understand why I would want to keep every single message, with the details scattered around, instead of having everything in one message. Why bother with the search tool when everything is one place? I'm sorry top-posting is annoying you. That isn't my intention, nor is it to make life more difficult for the receipient. I can only base my next statement on the feedback you've received here: you're the only one who finds it difficult.You're advocating bottom-posting as courtesy. It's been a while since I read a guide to e-mail courtesy, and things change quickly on the internet. Maybe "bottom posting is preferred" has come into fashion since I last read one. Your word is usually plenty good enough for me on technical subjects, but this is a matter of opinion. If you provided some third-party courtesy guides that also disapprove of top-posting, I'll consider changing my ways.
" top-posting works satisfactorily for me, and apparently everyone else here except you. "
That's patently untrue, and reading through the discussion will indicate that, while the majority of Windows admins disagree with me (and they seem to make up the majority overall on TR), I do not stand alone. I don't know whether to call your assertion, made more than once, ignorance, exaggeration, obfuscation, or an outright lie, but it is patently false no matter how you arrived at it.
" What's 'digest mode'? "
Bah. We're all ignorant about something. Don't sweat it. Anyhow, "digest mode" is a setting for receiving mail in groups collected over a time period as a single file rather than individual files per message. You get a "digest" format rather than individual emails format.
" I don't understand why I would want to keep every single message, with the details scattered around, instead of having everything in one message. Why bother with the search tool when everything is one place? "
First, it's not "scattered around", it's saved and organized, unless you're just a data slob. This is especially the case with properly threaded email clients. Second, you might want to keep the entire message trail for a number of reasons, including accountability in case of history edits, attribution since people have a tendency to lose track of attribution notices in replies, and saving bandwidth by not sending a six-megabyte historical archive with "Me too!" tacked onto the top as a single email. Besides, I don't know about you, but when I have three hundred lines of discussion history in one single file, especially if there's a lot of top-posting going on so it's more difficult to parse by eye for a particular part of the discussion, I still need a search tool if I want to find one thing in particular quickly and without effort. Thank goodness for regex matching tools, and too bad most GUI email clients don't provide proper regex matching tools.
" Maybe "bottom posting is preferred" has come into fashion since I last read one. "
It has at various times in the past been a more popular approach than top-posting. This is not just something "new". It is, rather, something abandoned by many largely because of the subtle influence of applications that encourage top-posting. It's probably more obvious to those of us who communicate regularly on mailing lists that predate Windows, and who participate in computing traditions that predate Windows (such as unix hackers).
" some third-party courtesy guides that also disapprove of top-posting "
Sadly, netiquette has largely fallen out of favor on the Web, as evidenced by the rising tide of discourteous jackasses who do things like demand help with something from volunteers as though it's their divine right, but here's some of what I've found in a quick search:
Wikipedia, on top-posting.
RFC 1855
The Jargon File speaks.
Again, the Jargon File, this time showing that bottom-posting isn't some newfangled thing I advocate but a venerable standard that is subverted by recent trends.
The Usenet perspective.
A Usenet etiquette guide for quoting and replying.
Another, more complete Usenet guide for quoting and replying.
A "fair and balanced" look at the two, with only mild bias toward bottom-posting and/or interleaved replies, that ultimately ends up having to really stretch to justify top-posting at all.
The "Trim-Posting Manifesto". It is unfortunately tainted by obvious bias regarding certain unrelated politcal and ethical issues, but it brings up a very good point: top-posting makes life quite unlivable for blind people trying to struggle through email with screen-readers. Bottom-posting (or interleaved posting) is the email equivalent of wheelchair ramps and elevators, among other benefits.
The Ursine online terminology reference.
General Usenet netiquette.
More Usenet netiquette, showing incidentally how general netiquette is largely an outgrowth and adaptation of Usenet netiquette.
A fairly clear personal appeal.
A specific appeal on behalf of blind people using screen readers.
I'll stop now, though the sea of links that make up the Internet and are captured in Google extend well past the horizon on this subject. Interestingly, I have yet to come across a single netiquette guide that favors top-posting except, possibly, in a passing "when in Rome, do as the Romans do, but bottom/interleaved posted replies are preferred otherwise" style.
So. How's that for a very noncomprehensive list of third-party guides to netiquette? A majority disagreement with me on one small community made up primarily of people indoctrinated by Microsoft Outlook hardly constitutes proof that I'm the only one who favors posting styles other than top-posting, especially since there are others here as well who have responded.
Okay, I see where you're coming from, and I think I see why we disagree. Most helpful was your reference 8, specifically the "Why does bottom posting make sense" portion. More on that later. I'm replying from work, and a few of the references you posted are blocked. I read or scanned most of the others, and based on the content, I think you and I are using e-mail in two very different ways. Many of the references you posted include references to Usenet, newsgroups, and other public forums; a couple don't refer to e-mail outside of a Usenet context at all. I'm assuming you are active in these environments. I'm rarely active in open public forums although I lurk a bit. I would never consider posting in one without lurking for several days and determining the "local" preferences. But 99% of my e-mail is done at work on a company system. Most the time there are only one or two receipients, rarely more than 5, and all are usually company employees. Go back and check the "Why does bottom posting make sense". It makes sense if you use e-mail as described in that paragraph, but I don't. I use it as described in the top posting page. You may feel that description is streched, but it sums up how I use e-mail quite accurately. I suspect many of the responses you received favoring top posting are from others in a similar "closed" environment. I'm going out on a limb and guess many (most) "e-mail" users don't participate in traditional newsgroups and don't even consider that as an aspect of e-mail. I'm also guessing many today define e-mail strictly as a message sent between individual personal mailboxes, not to public forums. I'm not trying to start a debate over the meaning of the word e-mail. I'm just wondering if differing working definitions and email usage environments are the cause of the disagreement.
Granted, the annoyance factor of top-posting drops considerably when two or three people exchange an email only a couple of times back-and-forth, then the discussion disappears into memory, so you have a point regarding "closed" circumstances. On the other hand, while being reduced considerably, the annoyance doesn't disappear entirely. Furthermore, in such a circumstance, all the supposed benefits of top-posting on its own merits (such as maintaining a history of long discussions) also tend to diminish or vanish. The arguments proposed thus far in favor of top-posting in these ITLOG discussions have all been the sort of arguments that apply primarily to mailing list discussions rather than brief private exchanges.
. . . and I'd rather people get in the habit of bottom-posting (or interleaved posting) before they show up on some mailing list and start screwing up the format of an ongoing discussion I've been reading.
Usually, I don't think too heavily on the OS I'm using. I'm used to
Linux. I'm used to the ways it makes my life easier, the ways it makes
me more productive, the flexibility of the system at my fingertips. I'd
really only notice most of this stuff consciously these days if I
suddenly found myself using an OS that did not grant me these things.
My, how things have changed from the days when Windows was basically
all I knew.
Once in a while, though, something happens that causes me to just
marvel at the wonderful state of affairs on one or more of my
computers. Tonight, I ran an apt-get upgrade (the Debian GNU/Linux
equivalent of Windows Update, basically, but a lot more as it involves
basically every piece of software on my system -- imagine if Windows
Update handled third-party software as well, and did it faster and with
a less obnoxious interface) and was greeted by a beautiful sight. Let
me show you what it said:
After unpacking 1794kB disk space will be freed. Do you want to continue [Y/n]?
See anything interesting? Yes, that's right, after doing a major
software update on this laptop, nearly two megabytes of space were
freed up. When was the last time updating anything on a Windows system
actually freed up any space at all? I'm impressed. One thousand, seven
hundred and ninety-four kilobytes freed up. Hot damn.
LEGO Difference Engine : Andrew Carol built a difference engine capable of second or third order polynomials to three or four digits out of LEGOs . Gotta love the geeks.
Mind Hacks : The psyche is hackable. This link provides an interesting example of how (well) it works.
Hedgehog, a "small tactical Lisp interpreter" : Hedgehog is a Lisp dialect designed for consciseness, to be used on embedded devices. It's about time.
Take
a look at this MS FrontPage ad. Notice anything odd? No, I don't mean the fact that there's a Microsoft ad in ITLOG. Yeah, there's some
self-deprecating humor relating to how monumentally awful FrontPage is,
and it's about time, but that's not the point of including it here. Look for line 28 in the
source code on the "cleaned up" code example that makes the advertising
pitch. I'll be more explicit for you, with this quote of the content:
</p>That's right.We said FrontPage.</p>
In case you don't know HTML or English very well, there are two
problems. One is a missing space (English problem). The other, and for
more ironically hysterical, is the broken paragraph tag (HTML problem). I know that code wasn't produced by FrontPage (and not only because it's far clearer than it should be for FrontPage), but it doesn't exactly inspire confidence in the ability of FrontPage to produce clean code anyway.
I think that about does it for now. Enjoy.
There's a legendary thread called The Evolution Lie that has to date garnered no less than 2646 posts. It was rather a controversial subject, and prompted everything from psychotic rants to well-considered, deep philosophical musings, with a fair bit of humor peppering the thread as usual from the tangent-prone crowd of longtime regulars here at TechRepublic. Within a week of its creation, about two hundred posts had been collected in this thread. It got off to a fiery start and, through a series of obscenely virulent outbreaks of often unreasonable debate, it kept growing.
It has a competitor to fear, now. With the advent of the Unionize IT Now! thread, there's a frightening lot of controversy stirred up. It has, as of this writing, only been about four days since the thread was started. In that time more than three hundred posts have been made to the thread. This is about half the time it took the legendary Evolution Lie thread to get to two hundred!
It probably wouldn't have gained speed so quickly if it weren't for three things:
Paycheck-oriented Information Systems workers tend to be really bad at understanding economics, but really good at counting pennies.
Good programmers and their ilk tend to be really good at understanding economics.
Everybody is already worried about their jobs in the industry.
Unionizing the IT industry would result in an increase in the median and mean reported pay rate for domestic IT industry skilled labor. It would also result in a substantial decrease in unreported entry-level IT industry skilled labor, and a significant drop in employment numbers. Because the reported pay rates would climb, though, things would look rosy on paper. Finally, of course, it would result in much of the IT industry voting with its feet, moving overseas to do business, damaging the US domestic economy rather significantly.
I, for one, am against it. The majority of people in that thread seem to agree with me. Maybe you have your own opinion.
Regardless, it's certainly a controversial enough topic that it seems set to blow past the Evolution Lie thread's record high of 2646 posts as though it were standing still. I wonder if the trend in posting will continue unabated long enough for that to happen. After all, there's always something else to say about philosophical subjects, but almost everything being said in the Unionize IT Now! thread is a repeat of something that has already been said there, already.
If we want to put the Evolution Lie thread in its place, we need some interesting tangents about the time posting starts to slow down. I don't doubt it will happen, with this crowd. I wonder if the tangents will be interesting enough to capture my attention. The unionization debate has already lost my attention, pretty much.
Who needs a core architecture? This post originally appeared on an external website
Are you trying to start a new movement toward minimalist blog posts with this one?
Jason, see the little bottle that says "drink me"? Follow the link.
For some asinine reason, the RSS aggregation only grabbed the summary of the post, rather than the whole thing. I'm going to stop using summaries and see if that fixes this problem for later posts.
Once again, Internet Exploder makes its presence painfully obvious while doing web development.
I'm working on an open source development project. We (the people on the dev team) are putting together a web application — something like a content management system on steroids, highly modular. We're using an autonomous decoupling architecture (thanks for the [...] This post originally appeared on an external website
I'm working on an open source development project. We (the people on the dev team) are putting together a web application — something like a content management system on steroids, highly modular. We're using an autonomous decoupling architecture (thanks for the [...] This post originally appeared on an external website
I'm a mediocre programmer using Perl. It's the programming language I know best, and I certainly have talent, but I just don't have enough serious software engineering and development experience to have cultivated some of the skills necessary to be really good at it. I'm working at that, though.
I keep running across things [...] This post originally appeared on an external website
I keep running across things [...] This post originally appeared on an external website
I'm a mediocre programmer using Perl. It's the programming language I know best, and I certainly have talent, but I just don't have enough serious software engineering and development experience to have cultivated some of the skills necessary to be really good at it. I'm working at that, though.
I keep running across things [...] This post originally appeared on an external website
I keep running across things [...] This post originally appeared on an external website
I'm a mediocre programmer using Perl. It's the programming language I know best, and I certainly have talent, but I just don't have enough serious software engineering and development experience to have cultivated some of the skills necessary to be really good at it. I'm working at that, though.
I keep running across things [...] This post originally appeared on an external website
I keep running across things [...] This post originally appeared on an external website
I'm a mediocre programmer using Perl. It's the programming language I know best, and I certainly have talent, but I just don't have enough serious software engineering and development experience to have cultivated some of the skills necessary to be really good at it. I'm working at that, though.
I keep running across things [...] This post originally appeared on an external website
I keep running across things [...] This post originally appeared on an external website
Well, that was kind of surprising — and annoying. For some reason, the RSS aggregation in this blog represents things like smart quotes as question marks, and any time I edit the post at the source this RSS aggregation reposts the abbreviated text. As such, I had four instances of the same thing posted, each with question marks in strange places in the title.
Obviously, I've gotten rid of three of them. Still, it is a bit annoying.
I'm a mediocre programmer using Perl. It's the programming language I know best, and I certainly have talent, but I just don't have enough serious software engineering and development experience to have cultivated some of the skills necessary to be really good at it. I'm working at that, though.
I keep running across things [...] This post originally appeared on an external website
I keep running across things [...] This post originally appeared on an external website
I'm a mediocre programmer using Perl. It's the programming language I know best, and I certainly have talent, but I just don't have enough serious software engineering and development experience to have cultivated some of the skills necessary to be really good at it. I'm working at that, though.
I keep running across things [...] This post originally appeared on an external website
I keep running across things [...] This post originally appeared on an external website
I'm a mediocre programmer using Perl. It's the programming language I know best, and I certainly have talent, but I just don't have enough serious software engineering and development experience to have cultivated some of the skills necessary to be really good at it. I'm working at that, though.
I keep running across things [...] This post originally appeared on an external website
I keep running across things [...] This post originally appeared on an external website
I'm a mediocre programmer using Perl. It's the programming language I know best, and I certainly have talent, but I just don't have enough serious software engineering and development experience to have cultivated some of the skills necessary to be really good at it. I'm working at that, though.
I keep running across things [...] This post originally appeared on an external website
I keep running across things [...] This post originally appeared on an external website
I'm a mediocre programmer using Perl. It's the programming language I know best, and I certainly have talent, but I just don't have enough serious software engineering and development experience to have cultivated some of the skills necessary to be really good at it. I'm working at that, though.
I keep running across things [...] This post originally appeared on an external website
I keep running across things [...] This post originally appeared on an external website
This was originally an excerpt from the off-site weblog post linked here:
I'm cheating on her, I'm afraid.
Since the RSS aggregator here at TR is going berserk and reposting
the same thing over and over again rather than just behaving itself,
I've turned off the aggregation. I don't want to deal with it any
longer.
This was originally a repost of something that is already posted two
entries back. I've deleted about a dozen of these things entirely. I am
unpleased.
If you want to see my more-thoughtful posts related to IT from now on, check out SOB . I'll just post the occasional frivolous bit here.
Having actually read the original post, here are my thoughts (a lot of these are just generic "how to write good code" items):
A good programming is nearly 100% language agnostic. Once you learn the C-Style languages (and Perl is one of them), the only syntaxes out there which will take more than a few hours (if not less) to pick up to the point of functioning are the BASIC knockoffs (between VB 3 - 6, VBA, VB.Net, and a few others, Microsoft has way too many varients of the same language that all have their unique quirks), the Lisp derivatives (Lisp, Scheme, etc.), and the "odd ball" and/or scripting langauges (Ruby, Python, SQL, COBOL, etc.). Syntax is pretty irrelevant at the end of the day. What matters more is your understanding of what a particular language is best suited for, and using the right language for the job. As much as I like working in Perl, for example, I would not think about writing a full Windows GUI program in it. I would rather use one of the .Net languages (VB.Net, C#, etc.) and then use Perl.Net where appropriate (such as a text parsing module).
Don't spread yourself too thin! One of my major stumbling blocks to this day is having to deal with too many languages at once. In a typical day, I'll "touch" around 5 or 6 different languages. It's sometimes hard to keep them straight in my head.
On the other hand, learn as many languages as you can, within major categories. Learn one really intense object-oriented language (C++, Java are good choices). Learn regex's beyond beleif; some people say I'm too hung up on regex's, I say I don't use them enough . One well crafted regex (and it is indeed a craft!) can frequently eliminate dozens, sometimes even hundreds of lines of code.
Understand the basics inside and out, and the rest will come naturally. This is a follow up to #1, and it is why I say that there's a world of difference between understanding the syntax of a language, and knowing a language. It took me 30 minutes to understand the Perl syntax. It took me a few years to learn how to use it to its full potential. This is actually why I am quite down on Java, JavaScript, and the .Net family. The languages themselves are extremely weak. They do not have do a single thing (other than having inheritance) that will save me a single line of code, make debugging easier, make my code elegant, foster fast execution, etc. That is what makes a language powerful. All of the above mentioned languages are actually extremely weak. Their real strength lies within their incredibly large libraries. A library is not a language, it is a set of additional tools. Would you learn some very odd spoken language, just because a lot of books are written in it? Or would you prefer to go get translations of those books in an easier to read language? For the same reason, if I have a choice, I'll write something in Perl before I write it in Java.
Learn the "common tasks" of software, and learn to do them in every language you use. For example, learn how to parameterize a SQL query in every language you touch, because to do otherwise is fatal. Nearly every piece of software, at the end of the day, boils down to an interface to CRUD (INSERT/SELECT/UPDATE/DELETE, in SQL parlance) against some data. Learn the methods for doing that in the language you are using, and learn which method to use where.
Pay attention to small details to optimize your code. For example, it is usually faster to store the length of a collection (minus one) to a variable and use that in your loop as the end point, than to ask it to check the collections length, then subtract one on each iteration.
Always use strict. Always turn on warnings. Pay attention to everything your interpreter/compiler tells you, and do what you need to do to make it stop telling you that. Don't write it off as a "quirk". If your compiler tells you "that variable may not be initialized when it hits that "catch" block, FIX IT. Because one day you will hit that catc block with an unitialized variable, and instead of handling the exception, you will be creating a new one!
Don't fall into the object trap. OOP is great on a large project with many programmers, it makes it very easy to divide the work up, isolate problems, "black box" functionality during the testing stage to have a class produce fake output so you can test your own components, etc. For smaller projects, all it does is add incredible amounts of overhead to the coding process. You site there sweating if something should be a class or an interface with only one implementation up front, when you could be coding. In a lot of them, you get hung up between primitives and objects on a regular basis. You find yourself writing dozens or even hundreds of lines of boiler plate code to create properties, enumerators, etc. when a procedural language would require a small fraction of it. Beware of psuedo-OOP, it is the worst trap of all, you are stuck in a netherworld between strict typeclassing and weak, primitives and objects, etc.
Learn to catch exceptions and handle them gracefully. 'Nuff said about that.
Know your libraries well, but always be aware (particularly in "fast moving" languages like Java and .Net) that the libraries are constantly changing, and the best way to do something today might not be the best way tomorrow.
Work on paper first, in pseudo-code. Then write code. Then test. Rinse and repeat. Debugging is typically 70% or so of a project, if you follow this sequence.
Use tools that work with you, not against you. But make sure they also promote good habits, too. For example, I like Notetab Pro ( www.notetab.com ) because it has an excellent search/replace system, including regex's (it will even do a regex search/replace through files). This has saved me countless hours of labor. Visual Studio is excellent for what it does. I have not worked with Eclipse. A real debugger that supports breakpoints, watches, etc. will typically shave 50% - 90% off of the debugging time versus having to log errors and variable contents and "breakpoint" (ie: "print 'Yo! Line 568 executing!;") to a file or the output. Your debugging will be more accurate and you will catch more bugs. Step through an entire run of the program once or twice, following every line, and make sure everything is happening precisely as you expect it to.
Pay attention to the "language of the moment", but feel free to ignore it. For example, there is nothing that I can do in JSP that I cannot do in Perl, and typically the programmatic overhead of Java makes the task take longer. ASP.Net, on the other hand, beats regular ASP six ways to Sunday, and saves me hundreds of hours of work (it is frequently faster for me to rewrite an ASP program in ASP.Net, and then add the additional functionality, than it is for me to try adding the new features in ASP).
Learn a variable naming scheme, and stick with it. Avoid using nonsense names, even for loop iterators (nothing is more frustrating, nor is anything a bigger source of bugs, when looping through multiple-dimension dataset, than trying to remember which dimension "i", "j", and "k" reference; use "iXCounter", "iYCounter", and "iZCounter" instead, for example).
Sweat the small stuff. Big time. The "minor bug" that you're aware of will seem to act like cheese the user's mouse. The "they'll never notice that" bug is what they will notice in the first 10 seconds of using your program.
Don't use threads unless you understand threads. Your user would rather stare at an hourglass than have the program explode 25% of the time when they click "cancel". In fact, they would prefer it if it blew up 100% of the time when they do that, because then its predicatable, at the very least.
If your program is doing different things under identical circumstances, unless you're using some randomness to perform logic, you have a MAJOR problem. Code, by its very nature, is deterministic.
The printer and highlighter is your best friend. Don't be afraid to spool out 50 pages of code, and sit down with a highlighter looking for bugs or improvements.
10 lines of code will always be more error free, and quicker to execute, than 100 lines of code.
Look at other peoples' code, but be aware that they may be lousy programmers. If I learned PHP from 75% of the PHP code that I've seen, I would be the worst programmer on the planet. The same is often true of Perl.
Beware the implicit variable. Especially in Perl. Saving 1 line of code by using the implicit variable is often a recipe for diaster, particular the farther you get from where you thought the implicit variable was created. Many, many functions will overwrite it, and you won't even notice until later.
Get very comfortable with standard SQL. Be wary of vendor specific extensions to it. You never know when you (or the customer) may want to change the backend database, or where the code will end up.
Learn the differences and advantages to both interpreted and compiled langauges. eval() and lambda functions rock extremely hard.
That one deserves a point to itself: eval() and lambdas will often save hundrens of hours of code. Perl's ability to execute the contents of a regex have saved me hundreds of hours of code. Sometimes it's worth it to use a "backwards" language like Perl or Lisp, just for that functionality!
Remember: you are writing the code, not your boss. Unless he's an extremely experience programmer, chances are you know better than he does when it comes to what language to use.
Understand the difference between your project specs, and the user's needs. I hear stuff all of the time like "product PDF output" for a project spec, when the user's actual need is "be able to have the output suitable to take to Kinko's and print it there". All of a sudden, an extremely complex piece of code became a simple Word macro.
On that note, be aware of your goals! If your goal is to transpose characters in a string, one langauge may need you to write a loop. Another language may allow you to use a regex. But if you write a loop in a language that would let you use a regex, you're wasting a lot of time.
That's all I've got, for the moment.
J.Ja
A good programming is nearly 100% language agnostic. Once you learn the C-Style languages (and Perl is one of them), the only syntaxes out there which will take more than a few hours (if not less) to pick up to the point of functioning are the BASIC knockoffs (between VB 3 - 6, VBA, VB.Net, and a few others, Microsoft has way too many varients of the same language that all have their unique quirks), the Lisp derivatives (Lisp, Scheme, etc.), and the "odd ball" and/or scripting langauges (Ruby, Python, SQL, COBOL, etc.). Syntax is pretty irrelevant at the end of the day. What matters more is your understanding of what a particular language is best suited for, and using the right language for the job. As much as I like working in Perl, for example, I would not think about writing a full Windows GUI program in it. I would rather use one of the .Net languages (VB.Net, C#, etc.) and then use Perl.Net where appropriate (such as a text parsing module).
Don't spread yourself too thin! One of my major stumbling blocks to this day is having to deal with too many languages at once. In a typical day, I'll "touch" around 5 or 6 different languages. It's sometimes hard to keep them straight in my head.
On the other hand, learn as many languages as you can, within major categories. Learn one really intense object-oriented language (C++, Java are good choices). Learn regex's beyond beleif; some people say I'm too hung up on regex's, I say I don't use them enough . One well crafted regex (and it is indeed a craft!) can frequently eliminate dozens, sometimes even hundreds of lines of code.
Understand the basics inside and out, and the rest will come naturally. This is a follow up to #1, and it is why I say that there's a world of difference between understanding the syntax of a language, and knowing a language. It took me 30 minutes to understand the Perl syntax. It took me a few years to learn how to use it to its full potential. This is actually why I am quite down on Java, JavaScript, and the .Net family. The languages themselves are extremely weak. They do not have do a single thing (other than having inheritance) that will save me a single line of code, make debugging easier, make my code elegant, foster fast execution, etc. That is what makes a language powerful. All of the above mentioned languages are actually extremely weak. Their real strength lies within their incredibly large libraries. A library is not a language, it is a set of additional tools. Would you learn some very odd spoken language, just because a lot of books are written in it? Or would you prefer to go get translations of those books in an easier to read language? For the same reason, if I have a choice, I'll write something in Perl before I write it in Java.
Learn the "common tasks" of software, and learn to do them in every language you use. For example, learn how to parameterize a SQL query in every language you touch, because to do otherwise is fatal. Nearly every piece of software, at the end of the day, boils down to an interface to CRUD (INSERT/SELECT/UPDATE/DELETE, in SQL parlance) against some data. Learn the methods for doing that in the language you are using, and learn which method to use where.
Pay attention to small details to optimize your code. For example, it is usually faster to store the length of a collection (minus one) to a variable and use that in your loop as the end point, than to ask it to check the collections length, then subtract one on each iteration.
Always use strict. Always turn on warnings. Pay attention to everything your interpreter/compiler tells you, and do what you need to do to make it stop telling you that. Don't write it off as a "quirk". If your compiler tells you "that variable may not be initialized when it hits that "catch" block, FIX IT. Because one day you will hit that catc block with an unitialized variable, and instead of handling the exception, you will be creating a new one!
Don't fall into the object trap. OOP is great on a large project with many programmers, it makes it very easy to divide the work up, isolate problems, "black box" functionality during the testing stage to have a class produce fake output so you can test your own components, etc. For smaller projects, all it does is add incredible amounts of overhead to the coding process. You site there sweating if something should be a class or an interface with only one implementation up front, when you could be coding. In a lot of them, you get hung up between primitives and objects on a regular basis. You find yourself writing dozens or even hundreds of lines of boiler plate code to create properties, enumerators, etc. when a procedural language would require a small fraction of it. Beware of psuedo-OOP, it is the worst trap of all, you are stuck in a netherworld between strict typeclassing and weak, primitives and objects, etc.
Learn to catch exceptions and handle them gracefully. 'Nuff said about that.
Know your libraries well, but always be aware (particularly in "fast moving" languages like Java and .Net) that the libraries are constantly changing, and the best way to do something today might not be the best way tomorrow.
Work on paper first, in pseudo-code. Then write code. Then test. Rinse and repeat. Debugging is typically 70% or so of a project, if you follow this sequence.
Use tools that work with you, not against you. But make sure they also promote good habits, too. For example, I like Notetab Pro ( www.notetab.com ) because it has an excellent search/replace system, including regex's (it will even do a regex search/replace through files). This has saved me countless hours of labor. Visual Studio is excellent for what it does. I have not worked with Eclipse. A real debugger that supports breakpoints, watches, etc. will typically shave 50% - 90% off of the debugging time versus having to log errors and variable contents and "breakpoint" (ie: "print 'Yo! Line 568 executing!;") to a file or the output. Your debugging will be more accurate and you will catch more bugs. Step through an entire run of the program once or twice, following every line, and make sure everything is happening precisely as you expect it to.
Pay attention to the "language of the moment", but feel free to ignore it. For example, there is nothing that I can do in JSP that I cannot do in Perl, and typically the programmatic overhead of Java makes the task take longer. ASP.Net, on the other hand, beats regular ASP six ways to Sunday, and saves me hundreds of hours of work (it is frequently faster for me to rewrite an ASP program in ASP.Net, and then add the additional functionality, than it is for me to try adding the new features in ASP).
Learn a variable naming scheme, and stick with it. Avoid using nonsense names, even for loop iterators (nothing is more frustrating, nor is anything a bigger source of bugs, when looping through multiple-dimension dataset, than trying to remember which dimension "i", "j", and "k" reference; use "iXCounter", "iYCounter", and "iZCounter" instead, for example).
Sweat the small stuff. Big time. The "minor bug" that you're aware of will seem to act like cheese the user's mouse. The "they'll never notice that" bug is what they will notice in the first 10 seconds of using your program.
Don't use threads unless you understand threads. Your user would rather stare at an hourglass than have the program explode 25% of the time when they click "cancel". In fact, they would prefer it if it blew up 100% of the time when they do that, because then its predicatable, at the very least.
If your program is doing different things under identical circumstances, unless you're using some randomness to perform logic, you have a MAJOR problem. Code, by its very nature, is deterministic.
The printer and highlighter is your best friend. Don't be afraid to spool out 50 pages of code, and sit down with a highlighter looking for bugs or improvements.
10 lines of code will always be more error free, and quicker to execute, than 100 lines of code.
Look at other peoples' code, but be aware that they may be lousy programmers. If I learned PHP from 75% of the PHP code that I've seen, I would be the worst programmer on the planet. The same is often true of Perl.
Beware the implicit variable. Especially in Perl. Saving 1 line of code by using the implicit variable is often a recipe for diaster, particular the farther you get from where you thought the implicit variable was created. Many, many functions will overwrite it, and you won't even notice until later.
Get very comfortable with standard SQL. Be wary of vendor specific extensions to it. You never know when you (or the customer) may want to change the backend database, or where the code will end up.
Learn the differences and advantages to both interpreted and compiled langauges. eval() and lambda functions rock extremely hard.
That one deserves a point to itself: eval() and lambdas will often save hundrens of hours of code. Perl's ability to execute the contents of a regex have saved me hundreds of hours of code. Sometimes it's worth it to use a "backwards" language like Perl or Lisp, just for that functionality!
Remember: you are writing the code, not your boss. Unless he's an extremely experience programmer, chances are you know better than he does when it comes to what language to use.
Understand the difference between your project specs, and the user's needs. I hear stuff all of the time like "product PDF output" for a project spec, when the user's actual need is "be able to have the output suitable to take to Kinko's and print it there". All of a sudden, an extremely complex piece of code became a simple Word macro.
On that note, be aware of your goals! If your goal is to transpose characters in a string, one langauge may need you to write a loop. Another language may allow you to use a regex. But if you write a loop in a language that would let you use a regex, you're wasting a lot of time.
That's all I've got, for the moment.
J.Ja
Dude, no matter what you do, this post looks mangled. Call me silly, call me crazy, but since even the simple editor on this site is "goofy", I wouldn't even attempt something as <sarcasm>complex </sarcasm> as an RSS feed.
This is actually the source of my anger at web development and web developers. Unlike the old-school coders of yore, they release something as soon as it looks good, regardless of functionality. I was raised (and taught, in terms of programming) that if something doesn't work 100% of the time under "normal" conditions and about 95% of the time under extremely abnormal conditions, you do not release it at all. That's one reason why I don't do much coding for "fun", I'm too much of a perfectionist and my release cycles stink because of it.
J.Ja
This is actually the source of my anger at web development and web developers. Unlike the old-school coders of yore, they release something as soon as it looks good, regardless of functionality. I was raised (and taught, in terms of programming) that if something doesn't work 100% of the time under "normal" conditions and about 95% of the time under extremely abnormal conditions, you do not release it at all. That's one reason why I don't do much coding for "fun", I'm too much of a perfectionist and my release cycles stink because of it.
J.Ja
Sadly, it seems to have eliminated the comment I wrote last night, that I put well over an hour into
(coding tips).
Unfortunately, open source developers do just that... they tend to release beta quality code. In and of itself, that isn't so bad. It becomes a problem when it works "good enough, most of the time" and someone else builds on top of that code. Since it's pre-release quality, updates tend to not be backwards compatable, breaking everything else that relies upon it. Sadly, I have been stuck in this trap all too often.
J.Ja
Unfortunately, open source developers do just that... they tend to release beta quality code. In and of itself, that isn't so bad. It becomes a problem when it works "good enough, most of the time" and someone else builds on top of that code. Since it's pre-release quality, updates tend to not be backwards compatable, breaking everything else that relies upon it. Sadly, I have been stuck in this trap all too often.
J.Ja
Your coding tips comment is actually under the entry now retitled "broken RSS aggregation", so never fear: it was not lost.
Does anyone happen to know whether TR has managed to fix the broken incoming RSS feed support?
Actually, we're in the process of shutting down the service. It's been abused by too many feed-spammers.
Thanks for the quick reply. I guess that answers the question: it's being "fixed" by being removed.
I might start just posting summary excerpts and links for SOB here, if I feel enterprising enough to bother, but I'm a touch too lazy for that at the moment.
RSS is a sick dog of a spec. I was going to write an RSS reader a while back, until I read the spec... I felt queasy. It makes the "HTML" mistake of being so loose with the rules that the content creators have to follow (in order to help foster rapid adoption) that it is very difficult for the people writing clients for it to know what to make of an RSS feed other than to display it as HTML, more or less...
J.Ja
J.Ja
I made some edits to the settings for this TR blog earlier today, and they were undone in the next couple hours! What's going on here? Is the database going haywire, or is there someone at TR editing my blog settings because I linked to SOB , or what?
Argh. Highly friggin' aggravating.
I've noticed that some of my comments on blogs was edited and an entire discussion is not in New or Hot Discussions.
Veddy, veddy strange....
Veddy, veddy strange....
That is strange, indeed.
On the plus side, someone at TR emailed me not long ago asking me to describe the problem in more detail, and letting me know they were looking into it. That's customer service, folks, and makes me feel somewhat better about the whole situation.
I've run across some boneheaded errors in TR discussions in my time
here. Many of them are to some extent merely the fault of a lack of
experience, perhaps coupled with a lack of prudent caution when
entering a new social dynamic. I've decided to chronicle some of the
more common mistakes of that sort here.
Top 10 Indicators You're A TR Newbie:
You drag out the tired, inaccurate, and oft-debunked old security through obscurity
argument to "prove" that Windows or Internet Explorer isn't less secure
by design than a competitor. This ridiculous fallacy is often
accompanied by dismissal of dissenting views as "Windows bashing", as
if that is a compelling argument.
You post questions that should be in Tech Q&A in Discussions
instead, and/or you post all your discussions (regardless of topic) in
the Network Administration area because it's the default.
You complain about a discussion's topic being "off-topic" for TR
when it's in the Miscellaneous discussion area, then for an encore
start new subthreads within a discussion (because the subthread to
which you're replying has reached its max depth, of course) without providing any
context to your response ? rather than just backtracking one level to
reply at the same depth.
You post a quibble for a Trivia Geek column that was already
addressed by seven different people in three different subthreads in
the same discussion. Extra points for correcting an aerospace engineer
on the technical details of how spaceflight works when your job title
is "IT department manager".
You actually think you can claim that there are great scads of
software types that just don't run on Linux (and "everyone" must know you can't play games on Linux) without ending up looking silly.
You suggest I'm using a thesaurus to construct my responses to your
so-called "arguments", and you think Jaqui is a girl. Bonus points for
suggesting either of us doesn't know anything about Windows because we
use Linux.
You accuse someone like jdclyde or Tech Locksmith of being a "Linux
zealot" just because one of them happened to say something less than
complimentary about Microsoft, or that jdclyde is a bigot (WTF, over?).
You don't know about Friday Yuk, or that it's okay that it's not
always on Friday. You don't have to like it, but you definitely have to
know what it is.
You aren't aware of the multi-post ghost, the evil spirits of RSS,
or the annoyance of so-called "people" creating TQ&A queries where
answers never get rated ? or that there's no way to "spend" your points.
You think it's a good idea to create a discussion thread that
starts out saying something like "All these debates about [insert pet
concept] are getting out of hand. I will provide the One True Way to
deal with the issue. Oh, and I'm completely unbiased . No, that's not my nose growing."
. . . and for the love of Gob and all that's Wholly, fill out your
profile, folks. This isn't really a newbie issue: it's a shiftless
layabout issue. Give us some hint of what we're talking to.
This list is subject to change as more comments appear below.
Special thinks to Jaqui for suggesting a couple of points for the original version of this list, and to Jay just for being Jay.
BWAHAHAHAHAHAHAA!!! That's awesome. That is SO making the 4/8 Geekend mail.
Glad ya liked it! I was trying to think of some way to get your name into one of those points, but I really couldn't think of anything that fit. Everyone loves you, so nobody ever makes those sorts of stupid mistakes in discussions with you.
I'd have added a Soapbox tag to this one, but I ran out of room in the text field for tags, and figured that stuff that actually related to the content was more important than the word "soapbox".
Spot on, but you forgot:
11) You claim that games don't run in Linux
Do you think TR will make this part of the 10 list
11) You claim that games don't run in Linux
Do you think TR will make this part of the 10 list
Also loved it...
suggestion: amendment to #5 to also include asking a question which was answered only 48 hours ago.. and again 7 days ago.. and again 2 weeks ago... ya know the 1 question I mean
... (I've made a pre-made answer for the next time it comes up... just wait for it)
suggestion: amendment to #5 to also include asking a question which was answered only 48 hours ago.. and again 7 days ago.. and again 2 weeks ago... ya know the 1 question I mean
Is this the right place to ask a question about lawn fertilizer?
I'll work everyone's favorite Trivia Geek in for you:
3.14 - You post a quibble that was already answered by seven different
people in three different subthreads in the same discussion. Extra
points for correcting an aerospace engineer on the technical details of
how spaceflight works when your job title is "IT department manager".
I'll work everyone's favorite Trivia Geek in for you:
3.14 - You post a quibble that was already answered by seven different
people in three different subthreads in the same discussion. Extra
points for correcting an aerospace engineer on the technical details of
how spaceflight works when your job title is "IT department manager".
in reference to number 4,I have to post the occasional oddly enough tagged discussion in there, it's tradition. ~lol~
You refer to Jaqui as "her" and "she". You try to "spend" your points on something. You start a discussion on poor spelling, grammar, or typing.You haven't filled out your profile.
- Keyboard Shortcuts:
- Prev
- Next
- Toggle

































