How to be a better programmer in 6 minutes
secretgeek.net
secretgeek.net
I do like the idea for making hard-coded strings stand out, however.
If anything, it did remind me to refactor some longish functions I had in a class I was working on.
Um...
I heavily disagree though that larger fonts cause you to write shorter methods. That's kind of ridiculous.
Wile the default monospace font on OSX (monaco) is fine, I find that my eyes adjusts better to the "proggy clean" fonts (avaiable for free here: http://www.proggyfonts.com/ ).
With good coding fonts, you are able fit more into the screen, distinguish between 1 and l, 0 and o more easily..etc. Here's a discussion on programming fonts a while back on HN (http://news.ycombinator.com/item?id=255257)
To see just how different they are, open up a window where you can toggle AA on and off (e.g. a Terminal window), and compare Monaco at 9pt-12pt each way.
How about learning to type with your feet, or only using the mouse, or maybe code blindfolded? (or all three!)
Somehow, people seem to have gotten the notion that doing things the hard way is somehow better or morally superior or something. It's not.
The "ugly strings" suggestion is bizarre, though. If he means "avoid hardcoded strings so you can localize your program", then you still need keys into your message catalog, which are usually...strings! And if he means "define constants for strings", you still need to define their values, which are also...strings!
I agree that doing things the hard way can be an interesting exercise though, which is why coding blindfolded is just as good of a suggestion as these others.
If a given constant appears in multiple locations, you're likely to screw up when you need to change its value. (Nope - global search and replace doesn't help - it will change semantically unrelated constants that happen to have the exact same value. Consider 0.)
1.) The string in question has an observable effect on the application's behavior, eg. a filename or text that appears in the UI.
2.) The string in question is used as a programmatic key; its actual value matters to you for readability's sake, but the user doesn't know or care what its value is.
For #1, you should be using some sort of localizable message catalog (eg. gettext or Java property bundles) or config file and not hardcoding it as a constant. Almost all of these use strings as the message key; in gettext's case, they just happen to be fairly human-readable strings. Converting them to a constant merely goes from one suboptimal solution to another.
For #2, the particular string used is part of the internal API of the program. Coding it as a constant buys you a little in that you can get the compiler to check it for you and make sure you didn't make any typos. The difference is really the old static vs. dynamic language debate. In any case, changing the string value here should be considered a program refactoring and done the same way you would do any other refactoring.
The bits have to be somewhere. The question is whether they appear one place per "meaning" or they're at every use.
Normalization is not just for databases.
> In any case, changing the string value here should be considered a program refactoring and done the same way you would do any other refactoring.
Which refactoring tools can distinguish "obj" (used as a prefix for object file temp names) from "obj" (used as a prefix for orange bear jumpsuit part numbers), let alone 0 from 0?
I am a violator here. I have emacs set to 6x10 on a 25" monitor, the result is 104 lines on a screen. And I like it.
Coming back to the article I want to mention some points. (Maybe some things are biased..)
Ref. 1.) While a bigger font size is good for your eyes (hope you guys don't stare to long in one session on the screen) it is bad to understand the bigger picture in my opinion. Sure you are "forced" to write good code, but that is a standard mantra which you should follow anyway. People who like TDD (BDD) aso. have embraced this deeply. Doesn't that huge font size rather reduce your productivity? Please consider this: http://www.codinghorror.com/blog/archives/000012.html
"Its better to have more screen space, not less."
Ref. 2.) Making a syntax element like hard coded strings so much stand out is contra productive in my opinion. It would be much smarter to focus on emphasizing the important aspects of your code rather than over-highlighting strings. No? I mean sure, everybody has a different taste and style, but where is the harm in hard coding certain strings? Firstly its fast, secondly this is a typical flame of how far can we eliminate certain things from our code? (instead of embedding SQL use ActiveRecord, etc.) If you want to go so far great, start by embracing e.g. gettext, and put everything is a DB. Oh wait, why is my code so slow?
Ref. 3.) I fully agree, though why does this whole article sound like a sales story for .net ? "Here are lists for a few .net languages: C#, VB.net, F#."
Ref. 4.) Basically I agree but "Ghoulish regular expressions"? If you define it by "ghoulish", how about rewriting it to make it more clear anyway? Increase tests by 1%? Uh, well I think with proper input verification you can eliminate alot of problems. I mean its great to work with unittests but a good advice would probably have been, hey please work with unittests its has shown to make code better but if you are too lazy at least use assertions?
Ref. 5.) Interesting advice, good idea though but if you look at code from "an open source project" than it might make you scream and run away. I think this advice is maybe better: http://norvig.com/21-days.html This is btw. the perfect article to outline why this whole "How to manage x in y <time unit>." is stupid.
Ref. 6.) Good advice. ".. distraught at just how much room you've got for improvement." Hm, depends on what my goal is.
Ref. 7.) Interesting advice, though wouldn't a "cruicial to your application method" be rather well programmed? Often it is probably better to refactor the whole function because if its so long that you have problems just writing it from scratch again, then there is too much code in it in the first place.
Ref. 8.) "And don't just write. Write a compiler!" WTH. Please Mr. Justice Gray, could I remind you that the article title is "8 ways to be a better programmer in 6 minutes." ? I mean the whole idea of this article is rubbish, (see peter norvig link) but compiler, 6 minutes, what?
While I generally agree than understanding "a" compiler and what it does. (Scanning, lexing, parsing etc.) Then also implementing one, is very good for your education but it should rather be in your next article of "how to be a better .net programmer in x years."
General comment:
I really like HN, the quality coming from reddit is great, but posts like this are a waste of time. (At least in my opinion.)
Well... nature works by killing what's bad (extinction) and not simply duplicating what's good (say, cloning). Removing errors improves the final product, copying what seems to be better at a given point in time limits the possibilities and eventually leads to disaster.
>...
>The effect is: you're forced to write shorter methods. And that's a Good Thing.
I find the opposite is true - I need to see more lines to appreciate exactly how goddamn awful that 200 line function is. And when I go to refactor it I need to be able to see as much as possible of it on the screen to start extracting bits out and make it shorter without losing context.
(Sarcasm alert.)
There is a nice self-regulation principle at work here: If you make software with a lot of bugs, you also spend time fixing those bugs. This hampers your ability to make more crap software. If you on the other hand produce quality software, much less time is spent at maintenance so you become more productive overall.
I think it is a fallacy to expect bugs to creep into your code. Eradicate them before writing the code lines. But what makes this hard for most people is that you don't think you need that amount of quality in your software.
Your sarcasm is misplaced and presumes bad code always comes before good code, it doesn't.
You should always make it easy for yourself to fix mistakes, even if you shouldn't have made them in the first place.
On the positive side: I like the idea of automatic uglification of "bad" code.
But I got to tweaking and realized that making comments stand out is amazingly helpful. I completely agree that it makes me want to write more comments and makes commented out code a glaring problem.
No. How about "8. Stop writing, start thinking." Plan a little bit before you start smashing out code.
Also, regarding number 5, go read the Plan 9 source for insight into clean style and tight code: http://csplan9.rit.edu/magic/webls?dir=/sys/