INFO-LINK



C/C++

Conversations: Hungarian wartHogs


November 2001 C++ Experts Forum/Conversations


"Breakthrough!" one of the officers called, poking her head into the mess hall.

Several people, Jeannine and I among them, looked up. "What?" "Whose breakthrough?" "What happened?"

The sudden excitement was palpable, and no wonder — things were worse than ever since the senior officers had made known we'd lost contact with the orbiting station and the main surface base. Likely, they were overrun by the incoming forces, although our officers had not yet officially admitted that we were in a hostile situation. When the news came, we had been sealed into the local base near the excavation site for two days already. And progress on the alien artifacts had continued to be maddeningly slow, knowing how near we must be to a breakthrough. Jeannine seemed closer than ever to figuring out the power requirements.

"Jäger says he's figured out part of the language, that's what," she informed us. The obscure writing on the ancient, and mostly defunct, equipment had been a major obstacle to progress. Until now, attempts to decipher it had been largely unsuccessful. "Something about a built-in redundancy — he's doping it out. Don't all rush in to bug him; he needs to concentrate. Thought you'd like to know." And then the officer's head disappeared as she continued elsewhere to spread the news.

"Redundant information," I sat back and mused aloud. "Does that ever sound familiar. Why, back on my first job..."


"Warts!"

"Beg pardon?" I turned at the sound of the Guru's voice.

"You have warts, my child."

Suddenly feeling rather self-conscious, I asked: "Uh, where? My medicated creams usually contr—"

"Your latest code is covered in warts!" she interrupted. "Otherwise known as Hungarian notation. Your variables are beginning to look like this." She picked up the whiteboard marker and wrote: wartHog. "In this case, the variable hog's wart has nothing to do with the pottery school [1]."

"Oh, that," I breathed a sigh of relief. "Hungarian notation? Is that all? Sure, yeah, I read a cool article about Hungarian notation, and it sounded like a good idea. Apparently it was quite the trendy thing for a while. Almost kind of a type calculus-ish direction, sort of in a way, you know. So I—"

"Gibberish!" the Guru exclaimed.

"Ah, well," I faltered. "I thought I said that rather clearly."

"Not you, my child," the Guru corrected. "The naming convention you chose to experiment with results in code that looks like gibberish. Even the prophet Petzold had his off days."

"Hmmmph," I hmmmphed, only slightly mollified. "Well, it's supposed to make code easier to write and read. For example, I can catch some type errors just by reading the code. If I write something like strcpy( szDestination, pachSource );, I can see a problem immediately — the second parameter is a pointer to an array of characters, but not necessarily null-terminated as strcpy requires. Or if I write printf( "%s", ulValue );, I can see that I'm passing an unsigned long where a null-terminated string ought to go. The code tells me that I'm doing the wrong thing."

"Of dubious practical advantage even for type-unsafe calls in C, or in environments when nearly everything is a type-challenged int or void* handle," she shook her head sadly, "and of no relevance at all in a type-safe object-oriented language like C++. This, you must unlearn. Warts are not information; they are disinformation.

"Consider your own parables. In your first example, in C++ you would use strings, which are objects, and problems like the first cannot arise because a string's semantics are well defined and encapsulated. One who writes string destination = source; just cannot get the buffer-copying semantics wrong, for they are never exposed and the calling programmer never required to assist them; the implementation details are well and truly encapsulated and always managed for you. As for your second example, in C++ you would normally use streams or other type-safe methods to write output, and type checking along with overload resolution guarantee a type-correct result even if a conversion is needed. One who writes cout << value; just cannot get the type wrong: if value is an unsigned long, the operator<< for unsigned longs will be invoked; or, if value has a type for which no operator<< is defined but value's type can be converted unambiguously to a type for which operator<< is defined, that operator<< will be invoked; otherwise, a compile-time error occurs. Not only does the C++ language and standard library detect what would be run-time type errors with other type-unsafe calls, it turns them into compile-time errors.

"In sum, the compiler already knows much more than you do about an object's type. Changing the variable's name to embed type information adds little value and is in fact brittle. And if there ever was reason to use some Hungarian notation in C-style languages, which is debatable, there certainly remains no value when using type-safe languages."

"Maybe so," I acquiesced. If nothing else, she had out-soliloquized me. "But you have to admit that, once you know the rules, using Hungarian makes it easier to create variable names."

"So certain are you?" the Guru arched her eyebrows. She placed herself in the guest chair. I knew what that meant: she was warming up for a debate. "I had that in mind when I said 'brittle.' How is it easier, say you?"

"Because the types tell you what to call the variables. It's almost mechanical," I said. "The variable name is pretty much generated from its type. Once you know the type, you can generate the name," I rambled, then realized I was rambling, and stopped. When I had begun, I had somehow had the sense there would be something much more profound to say; now that I heard the words coming out of my mouth, it all sounded a bit superficial. I remember wondering why, when it had seemed so much deeper the first time.

"And if the type changes...?" she prompted me just then.

"Well, you'd have to change the variable name, I guess. But!" I exclaimed, "That then forces you to examine each usage of the variable in your program, to ensure that it is still being used properly."

"Not a bit of it," she riposted. "It 'forces' you to do no such thing. In many cases, the programmers will simply forget — or worse, not bother — to consistently and globally change the variable name, never mind check the usage. And once they do not change the name, the code is lying to you, thus violating the commandment that says: 'Speak truth each one of you with his cubicle neighbor.' This," she shook her head quietly, "is reprehensible. Such is the disinformational evil that must of necessity follow, sooner or later but probably sooner, from the deceptive wartHog style."

"Ah," I smiled, "that's what global search-and-replace is for!"

"Most assuredly not," she shook her head again. "Never mind that you could inadvertently change other similar names of objects whose types have not changed! But even if the global replacement were done correctly, what value has it added? For it leaves the programmer no better off for his troubles than he would have been otherwise. If an error has been introduced by the change in type, such as because of implicit conversions, the error remains the same regardless of the object's superficial name, and you have merely added the menial and meaningless documentation work of changing the name. This too is vanity and a striving after wind."

It was time for me to fall back and regroup. "But you'd have the error no matter what naming system you used. If I have int count; and I change it to short count;, then many programmers might not bother to check the usage at all and just hope the compiler catches any range problems."

"That," the Guru acknowledged, "is what I just said. The problem is the same whether you uglify the variable's name or not, and by uglifying it you have merely added useless maintenance work because then you must additionally maintain the warty name. If you are not yet convinced, my child, I have one small question for you now: How would you apply Hungarian notation to templates?"

That stumped me. "Touch, I guess," I acknowledged. "A template doesn't really have a type of its own, because the template generates an unknown number of types, one for each set of parameters it's instantiated with. There's no type until it's instantiated, so you can't really create a variable name that encodes the type of the template itself."

"Well spoken, well said. Even more," the Guru added, "inside the template definition itself, how would you wartify the names of objects of a template parameter type? You do not know what they are."

"Oh, I see," I said. "You mean like this." On the whiteboard, I scribbled an offhand example:

template<typename T>
T AddOne( T wartT ) // what wart should wart be?
// papuch? lpsz? huh? 
// (handle to unbounded harm)
{
return wartT + T(1);
}
"I believe source code is a form of communication," the Guru pressed on. "The question is, who is that communication aimed at? The compiler? No. Source code is a medium of communication from one programmer to another. It is an expression of intent, of what is desired to happen. We must strive to keep that communication as simple and clear as possible. In order to do that, variable names should reflect the roles that those variables play. The exact type is secondary to the role. A variable name such as sz tells you only that you are looking at a C-style string. It conveys no information as to the role that string is to play."

"Well," I put in, "I don't think anyone would use just sz for a variable name."

"No? If we are to discuss Hungarian notation, we should discuss the canonical version presented by Dr. Simonyi [2]. His examples use variables named sz, pch, and so on. Such names, alas, present no useful information. If the variables were instead called xyzzy and yeti, respectively, or even merely x and y, I would still know simply by looking at their declarations that the first indicates an array of characters, and the second is a pointer to a character. Calling them sz and pch adds no useful information not already present in the code, and in particular, it adds no information not already well known to the compiler. Worse, it could be a lie if the type has changed since the wart was chosen. In any event, even if the wart lies not, the questions are still: What are the variables? What are they for? What do they do? How are they used? The wart helps not at all. I have to study the code to understand the roles they play. The code fails to communicate the intent of the programmer; therefore the names sz and pch are poor choices."

"In your opinion," I ventured.

"In my opinion," the Guru nodded. "Yes, this is still somewhat an area of opinion, rather than hard fact alone, although fact it is that names such as sz are next to useless and that Hungarian warts are brittle in the face of change. When we drafted the coding style guidelines several years ago, Hungarian notation was but one of many areas of lively debate. Unlike some discussions, this one was actually reasonably civilized. We examined the naming convention, listened to the experiences of those who had used it, and eventually came to the consensus that we did not like the convention. Although we did not dislike it enough to prohibit its use outright, we did consider it brittle enough to actively discourage it. Hence, to quote this team's standards:

"Avoid Hungarian notation. It will make a liar out of you.
Warts are not information, but disinformation."

"Hungarian is not only mendacious, but it is high-cholesterol; it is suspected of being fattening, and it is in all probability a flagstone on the road leading to a wasted and dissolute life. Indeed, I recall only one time when Hungarian notation was useful on a project."

This hook intrigued me. "What was that?"

"One of the programmers on the project was named Paul," the Guru explained. "Several months into the project, while still struggling to grow a ponytail and build his report-writing module, he pointed out that Hungarian notation had helped him find a sense of identity, for he now knew what he was..." She paused.

I blinked. It took me about ten seconds, and then I shut my eyes and grimaced painfully. "Pointer to array of unsigned long," I groaned.

She smiled, enjoying my pain. "True story," she said [3].

It was then that I thought I had found a way to corner her in an inconsistency. "Well," I asked innocently, having quickly recovered from the awful pun, "what about our convention of using a trailing underscore suffix for member variables? Isn't that kind of a watered-down version of Hungarian?"

The Guru smiled pleasantly. "So it may appear to the uninitiated, but appearances are in this case deceiving. The underscore has nothing to do with type — it has to do with flagging scope and privacy. It also has a small practical benefit: we realized that passing a parameter to a member function — particularly an initialization function or a constructor — we would often want to use the same name for both the member variable, and for the passed parameter. For example:

class T
{
int count_;
public:
T() : count_(0) {}
void init(int count) { count_=count; }
};

"We are giving the init function a count. Why come up with a different name for the parameter, when both the parameter and the member play the same role? We actually discussed several options for such cases: prefixing member variable names with my (or with our for static data), prefixing the parameter name with given, and so on. In the end, we decided to adopt a trailing underscore for the member, and no underscore for the provided parameter."

I frowned. "Isn't this convention a little debatable?"

The Guru grinned wryly. "Wendy's personal preference is the other way around. But then no one is perfect, and she did just produce a most exceptionally beautiful child in Jeannine [4], so one must make allowances."


"Maybe you should keep your mind more on the here and now," one of the others at the table muttered. Tensions were high, and everyone was hoping for results from my and Jeannine's work, too.

I was not surprised that it was Jeannine who quickly jumped to my defense, but I was surprised at the vocabulary she applied to set the mutterer straight. A broad vocabulary, deftly applied, is far more effective than mere repetitive epithets and expletives, and Jeannine's tongue-lashing was nothing if not effective. Hmm, I said to myself, said I, now there's a gal who knows about communication...

Further Reading

Ottinger's rules for naming variables: <www.objectmentor.com/publications/naming.htm>.

References

[1] The first reader to correctly identify the source of this oblique reference, as well as why it's appropriate for this November 2001 column, will receive an autographed copy of Sutter's More Exceptional C++ when it is available in November 2001. All submissions must be sent by email to hsutter@acm.org with the subject line "I know! I know!" and must include a valid (non-munged) return email address and snail-mail postal address. Contest closes at midnight on October 15, 2001.

[2] Charles Simonyi. "Hungarian notation." Reprinted at <http://msdn.microsoft.com/library/en-us/dnvsgen/html/hunganotat.asp>. Readers are encouraged to study the naming convention and decide for themselves, rather than rely on the opinions of the authors.

[3] Indeed a true story that happened to one of the authors.

[4] Not the same Jeannine as in the framing story. See "Conversations: Back To Base-ics," C/C++ Users Journal C++ Experts Forum, September 2001, <www.cuj.com/experts/1909/hyslop.htm>.

Jim Hyslop is a senior software designer at Leitch Technology International Inc. He can be reached at jim.hyslop@leitch.com.

Herb Sutter is an independent consultant and secretary of the ISO/ANSI C++ standards committee. He is also one of the instructors of The C++ Seminar (<www.gotw.ca/cpp_seminar>). Herb can be reached at hsutter@acm.org.


Around the Web

Honeypot Detection in Advanced Botnet Attacks

Honeypots have been successfully deployed in many computer security defense systems.

Quick Read

Swarm: A True Distributed Programming Language

The Swarm prototype is a simple stack-based language, akin to a primitive version of the Java bytecode interpreter.

Quick Read

Key Software Development Trends

Several trends are emerging within the area of software development. Here are some of the most important trends S. Somasegar has been thinking about recently.

Quick Read

Understanding Parallel Performance

Understanding parallel performance. How do you know when good is good enough?

Quick Read

Short and Tweet: Experiments on Recommending Content from Information Streams

The authors used 12 algorithms to study the URL recommendation on Twitter as a means of better directing attention in information streams.

Quick Read





Video

Forty finalists will gather in Washington, D.C. from March 11-16 to compete for $630,000 in awards.; DDJ; Intel; science; Dr. Dobb's talks with Commonsware's Mark Murphy about what's involved in developing software for the Android operating system; Android; apple; DDJ; tablet development; The new method uses analytics technology developed by the Mayo and IBM collaboration, Medical Imaging Informatics Innovation Center, and has proven a 95 percent accuracy rate in detecting aneurysm.; Algorithm; DDJ; diagnostics; ibm; imaging; T-Mobile USA is enabling phone calls to Haiti without charges for international long distance through January 31 and retroactive to the earthquake on January 12; DDJ; mobile; wireless; Al Williams gives you a demor of One-Der: The One Instruction CPU; DDJ; At the 2010 International Consumer Electronics Show, the auto industry's first working smartphone application was unveiled; DDJ; mobile; The Bluetooth Special Interest Group (SIG) has announced the adoption of BLUETOOTH low energy wireless technology.; bluetooth; DDJ; wireless; IBM has unveiled its list of five innovations that have the potential to change how people live, work and play in cities around the world over the next five to ten years; DDJ; ibm; TeliaSonera's LTE mobile broadband commercial network in Stockholm is now the fastest and largest in the world.; broadband; DDJ; ericsson; mobile; Google has introduced, google Goggles, a visual search application on Android devices that allows users to search for objects using images rather than words; Android; DDJ; google; mobile; Visual Search Applications; Dr. Dobb's talks with David Intersimone, Vice President of Developer Relations and Chief Evangelist at Embarcadero Technologies, about RAD Studio 2010, SQL optimization and his reflections on the software industry.; database programming; DDJ; sql; Researchers from Intel Labs have created an experimental, 48-core Intel processor or "single-chip cloud computer."; cloud computing; DDJ; Intel; multicore; parallelism; The Large Hadron Collider will produce roughly 15 million gigabytes of data annually, to be accessed by a distributed computing and data storage infrastructure called the LHC Computing Grid.; CERN; DDJ; grid computing; physics; A mobile handheld device designed to let users can point, shoot and listen to printed text.; DDJ; Intel; mobile; Ericsson has become the first vendor to prove end to end interoperability in TD-LTE, another standard of 4G radio technologies designed to increase the capacity and speed of mobile telephone networks.; DDJ; ericsson; mobile; TD-LTE; According to a recent study, 80 percent of US respondents feel there are unspoken rules about mobile technology usage, and approximately 69 percent agreed that violations of these unspoken mobile manners are unacceptable.; DDJ; Intel; mobile; IBM and Canonical will introduce a software package for netbooks and other thin client devices in Africa. This is the first cloud- and premise-based Linux netbook software package offered by IBM and Canonical.; cloud computing; DDJ; ibm; His unprecedented ability to manipulate individual atoms signaled a quantum leap forward in in nanoscience experimentation and heralded in the age of nanotechnology.; DDJ; ibm; nanotechnology; IBM honored for its invention of the Blue Gene family of supercomputers. Adobe founders also recognized.; adobe; DDJ; ibm; Former U.S. President Bill Clinton addressed thousands of online entrepreneurs from around the world gathered for the third APEC Business Advisory Council SME Summit in Hangzhou, China.; DDJ; e-business; With free cooling for several months a year, Sweden is an ideal location for cost-efficient data centers.; data centers; DDJ; PNC Bank introduces a new mobile App for the iPhone and iPod touch that provides Virtual Wallet customers with a high-def view of their money while on the go.; DDJ; iphone; The Swedish LTE site will be part of a commercial network scheduled to go live in 2010, bringing data rates far above what is possible in today's mobile broadband networks.; DDJ; ericsson; mobile broadband; Nanotechnology advancement could lead to smaller, faster, more energy efficient computer chips.; circuit boards; DDJ; nanotech; semiconductor; Dr Dobbs talks with with Claudia Backus, Senior Director of Ecosystem Programs at Motorola, regarding the company's recently released MotoDEV Studio for their Android-powered phones.; Android; DDJ; mobile; motodev; The Extremadura Regional Government of Spain and IBM have launched an electronic prescription system in 680 pharmacies in western Spain.; DDJ; ibm; Ericsson to Acquire Majority of Nortel's North American Wireless Business; DDJ; ericsson; mobile; telecom; Nintendo's Wii Sports Resort is an immersive, expansive active-play game that includes a dozen resort-themed activities.; DDJ; nintendo; video games; OnStar can remotely send a signal to the electronic system in the subscriber's stolen vehicle and the vehicle will not be able to be re-started.; cellular; DDJ; wireless; In celebration of the historic Apollo Moon landing, Google has released Moon in Google Earth.; DDJ; google; Ericsson has been awarded contracts with the three telecom operators in China to provide fixed broadband access.; broadband; DDJ; mobile; tv; wireless; Dr. Dobb's talks with Adobe's Adam Lehman about the upcoming release of ColdFusion specifically optimized for Flash and Adobe AIR platform delivery.; adobe; ColdFusion; DDJ; eclipse; Companies team to develop computing device and chipset architectures that will combine the performance of powerful computers with high-bandwidth mobile broadband communications and ubiquitous Internet connectivity.; broadband; DDJ; Intel; mobile; nokia; Adobe Systems and HTC recently announced that the new HTC Hero will be the first Android phone to ship with support for Adobe Flash Platform technology.; adobe; Android; cell phones; DDJ; flash; mobile; mobility; 3.2 million Euros awarded across eight prize categorie recognizing world-class scientific research and artistic creation.; DDJ; A parody of Paul Simon's "50 Ways to Leave Your Lover," but for software security nerds.; DDJ; sql; Dr. Dobb's Mike Riley talks with Jim Manias of Advanced Systems Concepts.  In this conversation, Jim discusses the new ActiveBatch 7 and how it can provide significant productivity gains for application developers and business process owners alike.; ActiveBatch; DDJ; Sun cofounder Scott McNealy and Oracle CEO Larry Ellison discussed Java's role in computing. Sun has also released OpenSolaris 2009.06.; DDJ; java; opensolaris; oracle; sun; Spotlight on NATO's centre of excellence on cyber defense in Tallinn, Estonia.; cyber defense; DDJ; nework security; security; Create Data Access Layers in ASP.NET; DDJ; In this demonstration you will learn how to layout a WPF application. We will explore the major layout panels that come with WPF, contrasting them with each other and describing when to use each.; DDJ; web development; windows; wpf; The Intel Foundation has announced the top winners of the Intel International Science and Engineering Fair; DDJ; Intel; News; science; Matt Hester demonstrates Internet Explorer’s 8 new feature Selectors API for utilizing CSS selectors for quick and easy element lookups.; DDJ; IE8; microsoft; windows; The NATO Virtual Silk Highway provides affordable, high-speed Internet access via satellite to the academic communities of the Caucasus and Central Asia.; DDJ; On a Windows Mobile device, applications are typically not closed down, but they stay in the background. Maarten Struys shows you a simple way to preserve battery power inside your own applications.; DDJ; microsoft; power consumption; windows; Windows Mobile Devices; Cadillac is now offering wireless Internet access with its CTS sedan.; DDJ; wireless broadband; By default, Windows Mobile Standard (Smartphone) applications launched from Visual Studio are not accessible on the device/emulator once they are minimized. In this video, Jim Wilson demonstrates two simple techniques to solve the problem.; DDJ; microsoft; smartphone; VIsual Studio; Mike Riley talks with the brass from Everypoint, creators of the NEMO mobile application development platform.; DDJ; Developers; development environments; mobile applications; Symmetric and asymmetric encryption algorithms, the SHA256 hash encryption algorithms, and how to implement in a simple application using Microsoft's Azure Services Platform.; Azure; DDJ; encryption; microsoft; security; windows; T-Mobile has introduced the Sidekick LX, which features enhanced video capability.; DDJ; Mobile Smartphone; Bluetooth 3.0 offers speedier transmission of large amounts of video, music and photos between devices wirelessly.; bluetooth; DDJ; mobile networks; wireless broadband; Cities around the world are battling with stressed transportation networks, so IBM has announced plans for three new smart rail projects in China, Taiwan and The Netherlands.; DDJ; ibm; ILOG; CASMOBOT is a Nintendo Wii remote controlled slope lawn mower.; DDJ; Denmark; nintendo wii; research; robotics; Project ensures documents, images, video and other Internet-based data growing at over 100 terabytes per month will live on for future generations; data storage; DDJ; history; Intenet; research; Sun Microsystems; Dr. Dobb's talks with Dave McAllister, Director of Standards and Open Source for Adobe, about the Open Screen Project.; adobe; DDJ; Open Screen Project; open source; The Facebook Connect SDK provides the code to let third-party developers embed hooks into their applications so users can connect to their Facebook accounts and exchange information using iPhone apps.; apple; cocoa; DDJ; Facebook; iphone; Mars in Google Earth Updated; DDJ; google; google earth; Google mars; red planet; The Sun Cloud is built on the Sun Open Cloud Platform that leverages the best in world-class open source technologies. The Sun Open Cloud Platform brings together Java, MySQL, OpenSolaris and OpenStorage.; cloud computing; DDJ; java; open solaris; sun; DDJ; High School; Intel; science; ILOG Elixir is a suite of professional user interface controls that gives developers a rich collection of innovative and interactive data display components for Adobe Flex and Adobe Air.; adobe; air; DDJ; elixir; flash; flex; ILOG; The inaugural San Diego Science Festival being held this month is touted as one of the largest multicultural, multigenerational, multidisciplinary celebrations of science ever seen on the West Coast; DDJ; lockheed; News; science; IBM has announced Innov8 version 2, a new version of its serious game that helps students and professionals hone their business and technology skills in a compelling, familiar video game format.; DDJ; ibm; serious games; Swiss Automobile Visionary Frank M. Rinderknecht builds a concept car with adaptive energy concept and iPhone controls.; apple; Concept Car; DDJ; iphone; j; siemens; Two-Year Plan to Focus on 32 Nanometer Manufacturing Technology; 32 nanometer technology; chip; cpu; DDJ; gpu; Intel; manufacturing; Nehalem; Westmere; New version features ocean layer, historical imagery, and more.; DDJ; google; Dr. Dobb's talks with Marty Alchin, author of "Pro Django" about his book and the deep internals of the Django framework.; DDJ; Django; A new content-authoring solution for learning professionals; adobe; DDJ; toolkits; web authoring; In a Second Life setting, Danny Coward discusses Java FX with Dr. Dobb's Jon Erickson.; DDJ; java; JavaFX; sun; The Core i7 processor is the first member of a new family of Nehalem processor designs with new technologies that boost performance on demand.; chip; DDJ; Intel; processors; Dan Diephouse, creator of XFire, a high-performance open-source SOAP framework (which became the Apache CXF project), shares the five common mistakes in SOA governance and insight about the Apache CXF and Mule RESTpack development environments.; apache; Apache CXF; DDJ; mule; open source; soa; soap; Xfire; Adrian Kaehler and Gary Bradski discuss the Open Computer Vision Library (sourceforge.net/projects/opencvlibrary/) and their book "Learning OpenCV".; DDJ; Open Computer Vision Library; OpenCV; In the first part of this two-part interview, Stephen Wolfram reflects on the 20-year anniversary of Wolfram Research.; DDJ; Mathematica; Mathematics; science; In the second part of this two-part interview, Stephen Wolfram discusses his book "A New Kind of Science."; DDJ; Mathematica; Mathematics; science; Nick Hodges talks about Delphi 2009, a RAD tool for Windows, and Delphi Prism, a database engine for Windows, Mac OS X, and Linux.; DDJ; delphi; RAD; windows; Dr. Dobb's talks with Tony Lombardo, lead Technical Evangelist at Infragistics, about all new UI tools for Windows and .NET.; .net; DDJ; silverlight; ui; windows; wpf; Dr. Dobb's talks with Eric Schulz about his International Mathematica User's Conference 2008 presentation on the Mathematica Essentials Palette and the future digital educational material; DDJ; Mathematica; Mathematics; Dr. Dobb's talks with ActiveState's Trent Mick about the recently released Komodo IDE 5.0.; DDJ; ide; open source; Dr. Dobb's talks with Continuity Logic's Kris Carlson about "Why We Die: Simulation of the Evolution of Senescence" and why he programs with Mathematica's functional programming language.; DDJ; functional programming; Mathematica; simulation; Ericsson collaborates with Intel; DDJ; ericsson; Intel; Mobile technology; Dr. Dobb's talks with Schoeller Porter about the grid and cloud versions of Mathematica; clouds; DDJ; Grid; Mathematica; Dr Dobb's interviews Yehuda Katz, maintainer of the Merb project, about the advantages this highly optimized Ruby on Rails alternative offers to web application developers.; DDJ; Ruby on Rails; Dr. Dobb's talks with Thomas Roman, Professor of Mathematics at Central Connecticut State University, about "Mathematica Visualization in a Theoretical Physics Problem - Negative Energy in an Unusual Quantum State."; DDJ; Mathematica; physics; quantum; science; The Forbidden City: Beyond Space & Time is a fully immersive, three-dimensional virtual world that recreates a visceral sense of space and time.; Blade Server; China; DDJ; ibm; linux; mac; online; virtual world; windows; Dr. Dobb's interviews open source luminary Miguel de Icaza about his latest milestone of achieving Microsoft .NET 2.0 Framework compatibility with the Mono Project .; DDJ; Dr. Dobb/s interviews Paul Kimmel, author of "LINQ Unleashed for C#", about Microsoft's new query technology that lets developers poll any information from any data source regardless of location or structure. I; C#; DDJ; Dr. Dobb's; LINQ; microsoft; It takes a supercomputer to build a super car. ; DDJ; HPC; simulation; Dr. Dobb's shows how to install and execute cross-platform scripting languages on the Windows Mobile platform. In this installment, Mike Riley examines Perl for Windows Mobile devices.; DDJ; mobile devices; perl; windows; Dr. Dobb's shows how to install and execute cross-platform scripting languages on the Windows Mobile platform. In this installment, Mike Riley examines Python CE which is optimized for Windows Mobile devices.; DDJ; mobile devices; python; windows; Dr. Dobb's shows how to install and execute cross-platform scripting languages on the Windows Mobile platform. In this installment, Mike Riley examines Ruby for Windows Mobile devices.; DDJ; mobile devices; ruby; windows; Young participants at ITU TELECOM ASIA 2008 in Bangkok, Thailand received free laptops as part of ITU’s initiative to promote affordable devices to increase access to information and communication technologies.; communication; DDJ; itu; Currently technical strategist to Microsoft's Chief Software Architect, Rebecca Norlander has had a tremendous impact on Excel, Internet Explorer, Windows XP SP2, and Windows Vista Security. ; DDJ; microsoft; Contributing authors to the book "Beautiful Code" got together at Dr. Dobb's SD West Conference in March, 2008. Part 1 of 3.; DDJ; programming; software development; Contributing authors to the book "Beautiful Code" got together at Dr. Dobb's SD West Conference in March, 2008. Part 2 of 3.; DDJ; programming; software development; Contributing authors to the book "Beautiful Code" got together at Dr. Dobb's SD West Conference in March, 2008. Part 3 of 3.; DDJ; programming; software development; Anders Hejlsberg discusses C#, Turbo Pascal, and what it means to design a programming language. ; C#; DDJ; microsoft; Turbo Pascal; Solar powered laptops given to youths at ITU Asia 2008.; DDJ; News; telecommunications; IBM breakthrough stands to impact future direction of information technology.; DDJ; Mike Riley spoke to ActiveState's Jeff Hobbes about the new features in Tcl Dev Kit and Perl Dev Kit including the code coverage and hot-spot analysis tool and Mac OSX support.; DDJ; Tim O'Reilly addressed the OSCON convention in his Wednesday keynote titled "Degrees of Freedom, Open Source in the Wed 2.0 Era.; DDJ;