|
The Art of Project Management
http://books.google.com/books?id=q1dJZv4Ycr8C Human beings, who are almost unique in having the ability to learn from the experience of others, are also remarkable for their apparent disinclination to do so "Discovering Common Lisp after over a decade of C++, I said to myself — 'What have I been doing with my life?'" -- Rich Hickey, developer of Clojure
Labels:
Lisp, C++, Clojure, functional programming Smalltalk and Oberon proponents did not failed because they were not wholeheartedly following their own ideals. They failed because the world has followed the money and the trends, not the ideals.
Is your brain going to be ready when the revolution comes?
Right now, software is primarily non-compositional. We have libraries and languages, which are built up of smaller libraries and languages. But end products are not designed to be composed; they are mostly designed for the end user only.
An exponential increase in development productivity could come from the fact that theorems compose, but tests don’t.
ThoughtWorks as being different from other software organizations.
The C ADT is implemented simply as String (or char *,
for you type theorists, using a notation from Kleene)
Labels:
c, humor, plt Rule 1 of malloc is
the same as rule 1 of air travel: "Attempt at all costs to keep your number
of landings equal to your number of takeoffs."
Kurt Gödel is Laughing His Ass Off Right Now - Chris Hecker's Website
chrishecker.com/Kurt_G%C3%B6del_is_Laughing_His_As... Does anyone want to bet as to which will gain self-awareness first: Wolfram Alpha or Wolfram, Stephen?
TheNewAndy comments on "It took three years to the patent office to ascertain the validity of" a
www.reddit.com/r/programming/comments/8mjmv/it_too... Don't accept code in a code review unless you'd be happy to put your name on it.
Labels:
software engineering, code review If you believe you are a competent programmer... : programming
www.reddit.com/r/programming/comments/8m56v/if_you... NASA: If the software isn't perfect, some of the people we go to meetings with might die.
Chapter 4. Graph Oriented Programming - JBoss JBPM 3.0.4 userguide 英文版文档 - 在线文档 - JAVA 编程资料牛鼻站
doc.javanb.com/jboss-jbmp-3-0-4-userguide/graphori... ![]() Labels:
BPM, orchestration, workflow Conal Elliott » The C language is purely functional
conal.net/blog/posts/the-c-language-is-purely-func... “C programmers” really program not in C, but in the purely functional language cpp.
As with any purely functional language, cpp consists only of (nestable) expressions, not statements.
Now here’s the clever part: when evaluated (not executed), a cpp expression yields a (pure) value of type
C, which is an ADT (abstract type) that represents imperative programs.
That value of type C is then executed (not evaluated) by the cpp language’s RTS (run-time system).
As a clever optimization, cpp’s RTS actually includes a code generator, considerably improving performance over more naïve implementations of the C abstract data type.Labels:
c, functional programming, monads, humor, Conal Elliott, purely functional dons-londonhug-decade.pdf (application/pdf Object)
www.galois.com/~dons/talks/dons-londonhug-decade.p... Engineer A: "Spec says this must never happen" Knowing .NET » Blog Archive » DSL Writers: Put Turing Completeness Out Of Your Mind
www.knowing.net/index.php/2009/04/19/dsl-writers-p... Start with a general language that you think is readable and take stuff out. If you can’t take out quite a bit, don’t write an external DSL
Mathematics and Computation » On programming language design
math.andrej.com/2009/04/11/on-programming-language... "There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, the other way is to make it so complicated there are no obvious deficiencies." -- C. A. R. Hoare
AI Summit Slides, Notes, Highlights and Photos — AiGameDev.com
aigamedev.com/coverage/gdc09-slides-highlights Game AI is any technique that contributes to the perceived intelligence of an entity, regardless of what’s under the hood.
Bad programming is easy. Idiots can learn it in 21
days, even if they are dummies.
Just because it is not your fault does not mean it is not your problem - virtualdub.org
virtualdub.org/blog/pivot/entry.php?id=245 Just because it is not your fault does not mean it is not your problem
Dr. Dobb's | A Conversation with William Kahan | November 1, 1997
www.ddj.com/article/printableArticle.jhtml;jsessio... exceptions are not errors unless they are handled badly. Exceptions are opportunities for extra computation.
The DCI Architecture: A New Vision of Object-Oriented Programming
www.artima.com/articles/dci_vision.html Objects are principally about people and their mental models—not polymorphism, coupling and cohesion
Semantic gap refers to the difference between expressing a problem in its own domain, and expressing it in some programming environment. [..] The programmer's job is to map a problem specified in problem domain semantics into the programming environment semantics. The smaller the semantic gap, the easier the job. The greater the semantic gap, the higher the salary the programmer commands. 20 cynical project management tips | IT Leadership | TechRepublic.com
blogs.techrepublic.com.com/tech-manager/?p=881&tag... Projects don’t fail in the end; they fail at conception.
[On DVCSs] DAGs are easier to
create. Lines are easier to use.
Wolfram Alpha is Coming -- and It Could be as Important as Google | Twine
www.twine.com/item/122mz8lz9-4c/wolfram-alpha-is-c... Where Google is a system for FINDING things that we as a civilization collectively publish, Wolfram Alpha is for ANSWERING questions about what we as a civilization collectively know.
Wolfram Alpha is Coming -- and It Could be as Important as Google | Twine
www.twine.com/item/122mz8lz9-4c/wolfram-alpha-is-c... One of the observations of NKS is that incredibly rich, even unpredictable patterns, can be generated from tiny sets of simple rules and data, when they are applied to their own output over and over again.
Wolfram Alpha is Coming -- and It Could be as Important as Google | Twine
www.twine.com/item/122mz8lz9-4c/wolfram-alpha-is-c... It has generally not been considered feasible for any one group to hand-curate all knowledge about every subject. This is why the Semantic Web was invented -- by enabling everyone to curate their own knowledge about their own documents and topics in parallel, in principle at least, more knowledge could be represented and shared in less time by more people -- in an interoperable manner. At least that is the vision of the Semantic Web.
Forget the mobile web: One site should work for all - at ZDNet.co.uk
resources.zdnet.co.uk/articles/comment/0,100000298... Using a mobile makes you a disabled user
Peter Landin
and Christopher Strachey developed ideas about the foundations
of programming languages: how to reason about what they do
(operational semantics) and how to understand what they mean
(denotational semantics)
W3C seem to try providing high-level “solutions” instead of low-level tools. It’s a limiting ideology.
How Google and Facebook are using R : Data Evolution
dataspora.com/blog/predictive-analytics-using-r/ The best thing about R is that it was developed by statisticians. The worst thing about R is that… it was developed by statisticians.
Great software is not built, it is grown [97 Things] : Near-Time
97-things.near-time.net/wiki/great-software-is-not... Great software is not built, it is grown
If Perl is for people who want to Get Things Done, then Haskell is for people who want to Do Things Right
"tables are for tabular data, not layout." Why? Just because they are called tables? Here's a news flash: HTML has no semantics beyond how it is rendered! (That's not quite true. Links have semantics beyond their renderings. And maybe label tags. But nothing else in HTML does.) This is the reason that the "semantic web" is still a pipe dream. HTML was supposed to have semantics, but it doesn't. Giving real semantics to a markup language is really really hard. The history of computer science is lousy with failed attempts, from KRL to SGML.
If you know ahead of time what your content is going to be it's not hard to write CSS that will make it look nice. The challenge is writing CSS that looks good if you don't know ahead of time what your content is going to be.
"The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying." - John Carmack on software patents
Labels:
patents, John Carmack both
Java and C# are rooted in 1980s style OOP to an even greater extent than
early C++ is
"I have always wished for my computer to be as easy
to use as my telephone; my wish has come true because I can no longer figure out
how to use my telephone" -- Bjarne Stroustrup
C++ Is my favorite garbage collected language because it generates so little garbage
There are more useful systems developed in languages deemed
awful than in languages praised for being beautiful--many more
<A HREF="chess.html">"Computer chess" and human chess (12-Oct-1998)
www-formal.stanford.edu/jmc/reti.html AI will not advance to human level if AI researchers
remain satisfied with brute force as a substitute for intelligence.
InfoQ: What Makes Haskell Worth Learning for Real World Applications
www.infoq.com/news/2009/01/rwh-book-interview Haskell manipulates functions as easily as Perl manipulates strings.
Labels:
Haskell The Perils of Parallel: Larrabee vs. Nvidia, MIMD vs. SIMD
perilsofparallel.blogspot.com/2008/09/larrabee-vs-... SIMD always has the advantage in raw peak operations per second [over MIMD]. [...] All the instruction fetching, decoding, sequencing, etc., are done once, and shouted out, um, I mean broadcast. The silicon is mainly used for function, the business end of what you want to do. If Nvidia doesn’t have gobs of peak performance over Larrabee, they’re doing something really wrong.
A folding language | Ola Bini: Programming Language Synchronicity
olabini.com/blog/2009/01/a-folding-language/ Of course, blasting out hundreds of thousands of lines a year is missing the point. If a Wizard is given complete technical control over a project (which is usually the smartest thing to do, but companies are rarely very smart), the Wizard will typically write in one of the super-succinct “folding languages” they’ve developed on campus, usually a Lisp or Haskell derivative. They call them Folding Languages because they write code that writes code that writes code… Wizards swear by it, and there’s no question that they can produce amazingly compact, fast, clean-looking code. But 90% of the devs out there claim they can’t read it, and whine a lot about it to their bosses. Given that most companies can only afford a few Staff Wizards, the Wizards are usually forced to capitulate and use Java or C++. They’re equally comfortable in any language you throw at them, though, and if you force them to use a verbose language, well, you get what you ask for. It still amazes me that companies are bragging about how many lines of code their Wizards have produced. Potential startups take note: your competitors are usually idiots. 'I'm sorry that I long ago coined the
term "objects" for this topic because it gets many people to focus on the
lesser idea.
The big idea is "messaging"' -- Alan Kay, inventor of the term OOP, 1998
Global_Technology_Outlook_Report_2009.pdf (application/pdf Object)
pokgsa.ibm.com/home/b/l/blueprin/web/public/SWGAB_... Analytics: "Forward-looking" Nathan Sanders : Journal - Avoid Casual Parsing
sandersn.com/blog/index.php?title=avoid_casual_par... The more subtle problem is that regular expressions are exactly what they say: regular. If your parsing problem isn’t regular, you’ll spend a lot of time writing an expression with leaks that can never be fully plugged.
Enfranchised Mind » Random thoughts on Haskell
enfranchisedmind.com/blog/2009/01/15/random-though... Haskell and Lisp are really opposite ends of a spectrum. In Lisp, all code is data. In Haskell, all data is code.
Enfranchised Mind » Random thoughts on Haskell
enfranchisedmind.com/blog/2009/01/15/random-though... [In Haskell] you don’t have an int, for example, what you actually have is a closure, a hunk of code, that when executed, will produce an int.
Benefits of programming (doing) versus reading blogs (thinking?) - Stack Overflow
stackoverflow.com/questions/418160/benefits-of-pro... "Reading, after a certain age, diverts the mind too much from its creative pursuits. Any man who reads too much and uses his own brain too little falls into lazy habits of thinking." -- Albert Einstein
Is anyone else here worried that they've spent so long looking briefly at everything, that they've
www.reddit.com/r/programming/comments/7pd89/is_any... A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects. -Robert A. Heinlein Web Beans was influenced by a number of existing Java frameworks,
including Seam, Guice and Spring. However, Web Beans has its own very distinct
character: more typesafe than Seam, more stateful and less XML-centric than
Spring, more web and enterprise-application capable than Guice.
Nabble - Haskell - Haskell-Cafe - Monads aren't evil
www.nabble.com/Monads-aren%27t-evil-td21362166.htm... nightmare = unsafePerformIO (getWrongWife >>= sex)
Labels:
haskell, humor The sweet spot, however is in making DSLs
business-readable rather than business-writeable.
"You can try to control people, or you can try to have a system
that represents reality. I find that knowing what's really happening
is more important than trying to control people." -- Larry Page
Jay Fields' Thoughts: The Cost of Net Negative Producing Programmers
blog.jayfields.com/2009/01/cost-of-net-negative-pr... Poorly designed software can cause death, and yet rarely is that kind of thing considered by a programmer.
Jay Fields' Thoughts: The Cost of Net Negative Producing Programmers
blog.jayfields.com/2009/01/cost-of-net-negative-pr... Java is a great tool for certain tasks, but there are plenty of things to dislike about it. I wouldn't want to work with people too blind to notice that.
Jay Fields' Thoughts: The Cost of Net Negative Producing Programmers
blog.jayfields.com/2009/01/cost-of-net-negative-pr... most good programmers spend the majority of their time fixing problems created by terrible programmers
Databasing trusted feeds with del.icio.us « Jon Udell
blog.jonudell.net/2008/12/29/databasing-trusted-fe... life’s too short to write any more CRUD or Web UI than I have to.
9.2 Integrating Planning, Acting, and Learning
www.cs.ualberta.ca/%7Esutton/book/ebook/node96.htm... ![]() Labels:
ai planning, machine learning Jonathan Ellis's Programming Blog - Spyced: CouchDB: not drinking the kool-aid
spyced.blogspot.com/2008/12/couchdb-not-drinking-k... Poor SQL; even with DSLs being the new hotness, people forget that SQL is one of the original domain-specific languages.
A well written paper has clear components: skeleton, muscles, etc.
The skeleton is an acyclic digraph of basic definitions and statements,
with cross-references. The meat consists of proofs (muscles) each
separately verifiable by competent graduate students having to
read no other parts but statements and definitions cited.
Intuitive comments, examples and other comfort items are fat and skin: a
lack or excess will not make the paper pretty. Proper scholarly references
constitute clothing, no paper should ever appear in public without!
The trains of thought which led to the discovery are blood and guts: keep
them hidden. Other vital parts, like open problems, I skip out of modesty.
Labels:
science, writing, tips Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
Mark Watson's opinions on Java, Ruby, Lisp, AI, and the Semantic Web: Haskell it is
markwatson.com/blog/2008/12/haskell-it-is.html Haskell's aiming at fast shared memory machines, Erlang's aiming at fault tolerant distributed systems
Some of what we’d hoped for from (what is now called) the Web hasn’t happened because the foundations of computation are still mud, and no one yet dares try to build very high.
Statistics vs. Machine Learning, fight! (also: ML nomenclature's original sin) - Brendan O'Connor's
anyall.org/blog/2008/12/statistics-vs-machine-lear...
Labels:
statistics, machine learning, humor Brad Abrams : Framework Design Guidelines: Avoiding Abstractions
blogs.msdn.com/brada/archive/2008/12/01/framework-... Abstractions are almost always necessary, but too many abstractions indicate over-engineered systems. Framework designers should be careful to design for customers, not for their own intellectual pleasure.
Reiser’s “law”: “Software is getting slower faster than hardware is getting faster”
Mike Burrows, inventor of the Chubby service at Google, says that "there is only one consensus protocol, and that's Paxos" - all other approaches are just broken versions of Paxos.
What do you buy a programmer for Christmas? « Successful Software
successfulsoftware.net/2008/11/25/what-do-you-buy-... T-Shirt idea: Happy lisper, sadly curly brace programmer On the front: (:-)) Why CouchDB Sucks - Die in a Fire - Eric Florenzano’s Blog
www.eflorenzano.com/blog/post/why-couchdb-sucks/ Every technology has its advantages and its drawbacks. The thing is, when a new
technology comes out that looks really promising and cool, everyone writes about
all of its advantages, and none of its drawbacks. Then, people start to use it
for things it isn't very good at, and they are disappointed.
Ask Reddit: How did the way you code change after 5 or more years of experience? : programming
www.reddit.com/r/programming/comments/7f8fc/ask_re... "Programs must be written for people to read, and only incidentally for machines to execute." -- Abelson & Sussman
Labels:
programming if customers are ultimately willing to believe false promises, it might be because there is a gap in current technologies.
Is there a Programmability Gap? Definitely. | SuperComputing 08
www.it-director.com/blogs/SuperComputing08/2008/11... Interestingly, Haskell showed its face. Unlike imperative languages such as C, C++, Java, and the new languages such as Chapel, X10, and Fortress, Haskell is a functional language, as is Erlang. Harnessing parallelism with a functional language is very different (and very much easier) than with an imperative language. Could Haskell (and/or Erlang) be a viable choice for programming in the future? Technically it certainly can. The problem is though the assumption in the mainstream computing community that C, C++, and Java are the only programming languages for mainstream development. It seems then that Haskell and Erlang, even if they would be better languages, are unlikely to take root widely. Fortunately, C++ and Java are taking on board more and more of the declarative idioms that come from functional programming languages. However this is not enough, C++ and Java are still imperative languages and so the assumptions that can be made in functional languages cannot be made.
What do expert programmers do when faced by an intractable problem? They cheat. And so should you! Indeed, some of the modern approximations for the Travelling Salesman Problem are remarkably effective.
Everyone knows that debugging is twice as hard as writing
a program in the first place. So if you're as clever as
you can be when you write it, how will you ever debug it?
(Brian Kernighan) Intellectuals solve problems: geniuses prevent them.
(Albert Einstein) Eliminate slogans, exhortations, and targets for the
work force asking for zero defects and new levels of
productivity. Such exhortations only create adversarial
relationships, as the bulk of the causes of low quality
and low productivity belong to the system and thus lie
beyond the power of the work force.
(W Edwards Deming) Labels:
development, productivity When I want to give a metaphorical explanation of Scala I say it's as if Java and SML had an illicit love child midwifed by Haskell.
Labels:
programming languages, functional programming, Scala the { buckblogs :here }: LEGOs, Play-Doh, and Programming
weblog.jamisbuck.org/2008/11/9/legos-play-doh-and-... You’d never see a Java program that was configured by writing Java code. That screams “hard coding”! But Ruby, you see, is different.
Labels:
java, ruby, syntax, configuration The worst bugs are the ones that affect only you and nobody else. Try getting customer support for that.
Ask compsci: How do you explain Computer Science? : compsci
www.reddit.com/r/compsci/comments/7b33m/ask_compsc... Mathematicians stand on each other's shoulders, while computer scientists stand on each other's toes. and computer engineers dig each other's graves.
Models are forever ... data is a happy side effect. Wadler's anecdoteI had the chance to talk to Philip Wadler, one of the designers of Haskell and of the Java generics system, before the talk. I asked him about the history of the generics feature, and he told me the following story: At this point in the talk I repeated an anecdote that Wadler told me. After he and Odersky had done the work on generics in their gj and "Pizza" projects, Odersky was hired by Sun to write the new Java compiler. Odersky thought the generics were a good idea, so he put them into the compiler. At first the Sun folks always ran the compiler with the generics turned off. But they couldn't rip out the generics support completely, because they needed it in the compiler in order to get it to compile its own source code, which Odersky had written with generics. So Sun had to leave the feature in, and eventually they started using it, and eventually they decided they liked it.Labels:
Java, generics, Phillip'Wadler, Odersky, Haskell, Sun, history Planner (programming language) - Wikipedia, the free encyclopedia
en.wikipedia.org/wiki/Planner_programming_language [..] computer memories were very small by current standards because they
were expensive, being made of iron ferrite cores at that time. [..] Lisp had adopted the programming pun of identifying NIL, the empty list with logical false (at memory location 0) because testing for 0 was faster than anything else.
Putting the tea into team: Is that a POJO or a NOJO?
puttingtheteaintoteam.blogspot.com/2008/10/is-that... This [Anemic Domain Model] is bad because you have the over head of the domain model without its advantages since your service layers still have to do all the hard work, which isn't very different from procedural programming.
Putting the tea into team: Is that a POJO or a NOJO?
puttingtheteaintoteam.blogspot.com/2008/10/is-that... DTO means something more specific - the term DTO is to do with it's role not it's implementation. A DTO is a NOJO but the terms are not equivalent (things can be NOJOs without being DTOs).
Putting the tea into team: Is that a POJO or a NOJO?
puttingtheteaintoteam.blogspot.com/2008/10/is-that... An "object" (in object-oriented programming) has identity, state and behaviour. A NOJO has identity and state. A function has behaviour but not state.
every so many years you've got to re-examine your requirements relative to the advancements in hardware
Flexibility is like portibility: there is no flexible
code, only code that has been, well, flexed.
the surest route to success
is to be the cockroaches of the corporate world. The immediate
cause of death in a startup is always running out of money. The
cheaper your company is to operate, the harder it is to kill
Life With Alacrity: Collective Choice: Rating Systems
www.lifewithalacrity.com/2005/12/collective_choi.h... systems available for collective choice. There are selection systems, which are primarily centered on voting and deliberation, opinion systems, which represent how voting could occur, and finally comparison systems, which rank or rate different people or things in a simple, comparative manner.
fartcatcher comments on I'm a beginner web developer and I need advice...
www.reddit.com/r/programming/comments/75tzn/im_a_b... Learn how to say "no" early and often in a project or you will find yourself doing a lot of work for not a lot of money. In the end, your clients will thank you for keeping them reasonable.
munificent comments on Ask a game dev: Anything you ever wanted to ask a console game programmer?
www.reddit.com/r/programming/comments/75r92/ask_a_... I'm a pipeline engineer. If it's boring and repetitive, I automate that shit! That's my job!
munificent comments on Ask a game dev: Anything you ever wanted to ask a console game programmer?
www.reddit.com/r/programming/comments/75r92/ask_a_... While it might not be fair, the game industry's practices reflect the capitalistic nature of the business: they can work people harder because there's so many more people out there who want the work. That being said, EA is gradually realizing that it takes more than warm bodies to ship games and that well-treated high-quality people are better than a barrel of noobs crunching every week. ...Please don't assume Lisp is only useful for Animation and Graphics, AI, Bioinformatics, B2B and E-Commerce, Data Mining, EDA/Semiconductor applications, Expert Systems, Finance, Intelligent Agents, Knowledge Management, Mechanical CAD, Modeling and Simulation, Natural Language, Optimization, Research, Risk Analysis, Scheduling, Telecom, and Web Authoring just because these are the only things they happened to list. 35, lost interest in programming, system administration sucks, don't want to go in management. What
www.reddit.com/r/programming/comments/73vm8/35_los... the things that people want for you, from you and of you often involve their own failed expectations of themselves
Chapter 9 - OpenGL Programming Guide (Addison-Wesley Publishing Company)
fly.cc.fer.hr/~unreal/theredbook/chapter09.html Bayesian inference from the outside, vs. Bayesian inference as it is practiced
www.stat.columbia.edu/~cook/movabletype/archives/2... all models are wrong, but some are useful
Users have pretty basic needs when it comes to computers. They want word processing, spreadsheets, communications, and games. These needs have not changed much since the advent of the personal computer.
After a while, everybody wanted to be a programmer. Since programming is actually kind of hard, many of these folk landed in PHP and HTML, hence the explosion of webapps. As such, the browser became a feeble example of a "runtime".
Google Chrome and the future of browsers | FactoryCity
factoryjoe.com/blog/2008/09/01/google-chrome-and-t... some of the ideas are interesting, but most (if not all) already existed as Mozilla bugs. For example, one thread per tab is https://bugzilla.mozilla.org/show_bug.cgi?id=40848, but process per tab is https://bugzilla.mozilla.org/show_bug.cgi?id=452272. I will not be surprised when people incorrectly claim that already-existing plans for Mozilla 2 (Firefox 4) are “inspired” by Google Chrome. Hibernate - Mapeamento OneToOne com duplicação de campos. :: Java Free.org
www.javafree.org/javabb/viewtopic.jbb?t=866424 Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (Fowler)
No simple concrete explanation of quantum computers is possible. Rather, there is an intrinsic quantum gap between how quantum computers work, and our ability to explain them in simple concrete terms.
Labels:
quantum computing Quantum computers cannot be explained in simple concrete terms; if they could be, quantum computers could be directly simulated on conventional computers, and quantum computing would offer no advantage over such computers.
Labels:
quantum computing Multicore programming is an irresistible bait for researchers: it is a hard puzzle, with quantifiable results, and a shot at changing the world. Unfortunately it is turning out that there is little quantifiable difference between the plethora of alternatives, leaving it as a matter of subjective judgment, which they hate.
Danny O’Brien’s Oblomovka » Blog Archive » on being a bit of an idiot
www.oblomovka.com/wp/2008/08/20/on-being-a-bit-of-... "The fundamental cause of trouble in the world today is that the stupid are cocksure while the intelligent are full of doubt." -- Bertrand Russell
Software development dogmata - good practices gone bad | Little Tutorials
littletutorials.com/2008/08/02/software-developmen... "Do Truth and Falsehood really exist? or only New and Old do exist, and Falsehood is but a truth grown old?" -- Constantine Cavafy, Greek modern poet
Perspectives - Erlang and High-Scale System Software
perspectives.mvdirona.com/CommentView,guid,ca94e6d... CPU speed increases are now coming more from multiple cores than from frequency scaling a single core. Consequently a language that produces an abundance of parallelism is a an asset rather than a problem.
Stevey's Blog Rants: Business Requirements are Bullshit
steve-yegge.blogspot.com/2008/08/business-requirem... If you don't already know exactly what to build, then you're in the wrong business. At the very least, you should hire someone who does know. Don't gather business requirements: hire domain experts.
Stevey's Blog Rants: Business Requirements are Bullshit
steve-yegge.blogspot.com/2008/08/business-requirem... The easiest way to build a product that kicks ass is to start with someone else's great idea (camcorders, for instance), and take stuff away.
7 Essential Guidelines For Functional Design | How-To | Smashing Magazine
www.smashingmagazine.com/2008/08/05/7-essential-gu... Design is necessarily a relationship between users with problems to solve and designers with solutions to offer.
Stay Hungry, Stay Foolish - Solid State Society | …on Gadgets | Algorithm.com.au
algorithm.com.au/blog/files/solid-state-society.ph... The traditional hard disk that’s likely to be in your
computer right now is made out of a few magnetic
circular platters, with a head attached to an
actuator arm above the platter that reads and writes
the data to it. The head’s such a microscopic
distance away from the platter that it’s equivalent
to a Boeing 747 flying at 600 miles per
hour about six inches off the ground. So,
when you next have a hard disk crash (and that’s
when, not if), be amazed that
the pilot in the 747 flying six inches off the
ground didn’t crash earlier.
Shared nothing parallel programming - O'Reilly Radar
radar.oreilly.com/2007/07/shared-nothing-parallel-... The important challenge is not to allow star developers to write multithreaded code; it is to allow the large army of enterprise developers out there to scale their applications to large numbers of cores.
Stay Hungry, Stay Foolish - Functional Programming Koans | …on Coding | Algorithm.com.au
algorithm.com.au/blog/files/e760be4709038dff852def... The Koan of Lazy Evaluation: Michel
Mauny was giving a guest lecture to new computer
science students. After the students were seated,
Michel pronounced “Today’s lecture will be about
Lazy Evaluation”, he paused for a moment then
concluded with, “Are there any questions?”
If you are chronically bumping into the limitations of single-assignment then you’re doing it wrong.
Old features are old news. Nobody cares that C has a conditional! Or that Lisp has a garbage collector! What can your language give me?
Library-oriented programming parallels Lisp's Language-oriented programming---where programmers write functions and macros then take a step back and realize they have written a whole new language. Could this be one of the reasons Java libraries flourish while Common Lisp's libraries don't?
Libraries have their own means of encapsulation (through interface classes) and their own means of combination (also through the interface classes).
A library (in OO languages) is a collection of classes designed and made to be used together in an organized way.
Paradigm Cycle: programmers program using the features of a language. Best practices emerge as to how to use those features to write better code---a paradigm emerges. Programmers discipline themselves to follow the best practices. Then the paradigm becomes integrated into the language itself. Linguistic constructs for the concepts of the best practices start showing up. Programmers get used to their language having those features. Then they take the paradigm for granted.
A Neighborhood of Infinity: The Fibonacci Numbers, Coalgebraicaly
sigfpe.blogspot.com/2008/07/fibonacci-numbers-coal... one difference between mathematics and computer science is that mathematics has more of a bias towards algebraic rather than coalgebraic structures
The team that developed Flickr wasn’t originally building a photo sharing service. They were building a multiplayer online game, and decided to let players share photos with one another. When they realized the players were more interested in sharing photos than playing the game, they dumped the game, and built Flickr.
Entrepreneurship 101 - a knol by Angelo Mastrangelo
knol.google.com/k/angelo-mastrangelo/entrepreneurs... Entrepreneurship is special because it is an opportunity to get to the top of an organization based strictly on ones own merits.
Labels:
entrepreneurship thinking I can adhoccumulate expertise efficiently
approaching infinity: Crash course in Applied Functional Programming
ai.redsymbol.net/2008/07/crash-course-in-applied-f... the definition of a high level language: if it lets you program by specifying what instead of how
Official Google Blog: Our Googley advice to students: Major in learning
googleblog.blogspot.com/2008/07/our-googley-advice... How do we find these non-routine savants? There are many factors, of course, but we primarily look for ...
... analytical reasoning. Google is a data-driven, analytic company. When an issue arises or a decision needs to be made, we start with data. That means we can talk about what we know, instead of what we think we know. ... communication skills. Marshalling and understanding the available evidence isn't useful unless you can effectively communicate your conclusions. ... a willingness to experiment. Non-routine problems call for non-routine solutions and there is no formula for success. A well-designed experiment calls for a range of treatments, explicit control groups, and careful post-treatment analysis. Sometimes an experiment kills off a pet theory, so you need a willingness to accept the evidence even if you don't like it. ... team players. Virtually every project at Google is run by a small team. People need to work well together and perform up to the team's expectations. ... passion and leadership. This could be professional or in other life experiences: learning languages or saving forests, for example. The main thing, to paraphrase Mr. Drucker, is to be motivated by a sense of importance about what you do. Labels:
problem solving A site’s signup page is the second most important page on a site (the most important is the home page itself) because this is where you’re asking for committment.
Want to Learn Haskell? - The Something Awful Forums
forums.somethingawful.com/showthread.php?threadid=... Haskell's type system and functions on it form a very nice, fairly large category called "Hask", so writing haskell code is really just writing arrows in Hask
Labels:
Haskell, Hask, category theory Want to Learn Haskell? - The Something Awful Forums
forums.somethingawful.com/showthread.php?threadid=... Category Theory starts with the observation that many properties of mathematical systems can be unified and simplified by a presentation with diagrams of arrows.
Labels:
category theory I'll get to your application in a minute - First, we need to build the framework : Jeffrey Palermo
jeffreypalermo.com/blog/i-ll-get-to-your-applicati... Creating frameworks is fun because the programmer is the customer of the framework. Writing software for yourself can be more fun than writing software for someone else. Writing a framework is writing software for yourself. On a client's dime, this is typically not acceptable.
Labels:
frameworks There are four necessary conditions for a deadlock to occur, known as the Coffman conditions from their first description in a 1971 article by E. G. Coffman.
Deadlock can only occur in systems where all 4 conditions hold true. Labels:
deadlock, Coffman conditions Extreme Anger Programming: you
are paired with a really dumb partner and after twenty minutes of agony
you rip the keyboard from their hands, delete everything they typed,
and do it yourself
The answer to "When will Haskell finally go mainstream?" is "most of it already has."
Labels:
Haskell, functional programming Generics in Java evolved directly from Haskell type classes
Labels:
java, generics, haskell, typeclasses, Phillip Wadler Java theory and practice: Going wild with generics, Part 2
www.ibm.com/developerworks/java/library/j-jtp07018... In the Java language, arrays are covariant (because an
Integer is also Number, an array of Integer is also an array of Number), but generics are not (a List<Integer> is not a List<Number>.) People can argue over which choice was "right" and which was "wrong" — of course, both have pros and cons — but there is no question that having two similar mechanisms for constructing derived types with subtly different semantics is a substantial source of confusion and mistakes.Labels:
java, generics Don't worry about what anybody else is going to do. The best way to predict the future is to invent it.
Labels:
entrepreneurship Building a Software Company: How to sell your software for $20,000
nukemanbill.blogspot.com/2008/06/how-to-sell-your-...
Labels:
entrepreneurship Computerworld - The A-Z of Programming Languages: Forth
www.computerworld.com.au/index.php/id;766897508;pp... Forth is an amplifier: a good programmer can write a great program; a bad programmer a terrible one. I feel no need to cater to bad programmers.
Labels:
Forth Some Haskell Misconceptions: Idiomatic Code, Purity, Laziness, and IO « Geek Rant
geekrant.wordpress.com/2008/06/23/misconceptions/ Haskell is not really a lazy language as much as it is a lazy-by-default language. It is simple and idiomatic to use strictness where your program calls for it.
Labels:
Haskell, lazy evaluation, strictness Some Haskell Misconceptions: Idiomatic Code, Purity, Laziness, and IO « Geek Rant
geekrant.wordpress.com/2008/06/23/misconceptions/ Strictly evaluating a lazy structure and lazily evaluating a strict structure does the exact same thing! With strict evaluation only, we run out of memory on huge structures like streams. With lazy evaluation only, we run out of memory on huge computations like loops.
Labels:
Haskell, lazy evaluation, strict evaluation, data structures In essence MapReduce works by repeatedly sorting and merging data that is streamed to and from disk at the transfer rate of the disk. Contrast this to accessing data from a relational database that operates at the seek rate of the disk (seeking is the process of moving the disk's head to a particular place on the disk to read or write data). So why is this interesting? Well, look at the trends in seek time and transfer rate. Seek time has grown at about 5% a year, whereas transfer rate at about 20%. Seek time is growing more slowly than transfer rate - so it pays to use a model that operates at the transfer rate. Which is what MapReduce does.
Labels:
MapReduce For random access, disks are irritatingly slow; but if you pretend that a disk is a tape drive, it can soak up sequential data at an astounding rate; it’s a natural for logging and journaling a primarily-in-RAM application.
with data-center networks getting faster, it’s not only cheaper to access memory than disk, it’s cheaper to access another computer’s memory through the network
What is Data Mining? Labels:
data mining With most web applications today, the number of simultaneous users can greatly exceed the number of connections to the server. This is because connections can be closed during the frequent pauses in the conversation while the user reads the content or completes in a form. Thousands of users can be served with hundreds of connections. But AJAX based web applications have very different traffic profiles to traditional webapps. While a user is filling out a form, AJAX requests to the server will be asking for for entry validation and completion support. While a user is reading content, AJAX requests may be issued to asynchronously obtain new or updated content. Thus an AJAX application needs a connection to the server almost continuously and it is no longer the case that the number of simultaneous users can greatly exceed the number of simultaneous TCP/IP connections. If you want thousands of users you need thousands of connections and if you want tens of thousands of users, then you need tens of thousands of simultaneous connections. It is a challenge for java web containers to deal with significant numbers of connections, and you must look at your entire system, from your operating system, to your JVM, as well as your container implementation. Be liberal in what you require but conservative in what you do
If someone else had already invented your system, would theirs work with
yours?
An impedance mismatch occurs when two devices are connected so that
neither is operating at peak efficiency. This lack of efficiency
is not due to any intrinsic incompatibilities between the devices,
it only exists once they are connected together the wrong way.
Object Relational Mapping (ORM) does not cure a pre-existing
impedance mismatch, it creates one, because it connects databases
to applications in a way that hobbles both.
getters and setters should be avoided because they break the encapsulation OOP offers
In Java, you have to use getters and setters because using public fields gives you no opportunity to go back and change your mind later to using getters and setters. So in Java, you might as well get the chore out of the way up front. In Python, this is silly, because you can start with a normal attribute and change your mind at any time, without affecting any clients of the class. So, don’t write getters and setters.
High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions.
Tom DeMarco makes the interesting point that the software industry had grown from zero to $300 billion dollars (in 1993). This indicates that the market had at least $300B worth of demand for software, even while complaining continuously about the cost and quality of the very same software. It seems to me that the demand for software production, together with the time and cost pressures, has only increased dramatically since then.
the sometimes dubious responses that various technology and development methods' offer to the overwhelming demand for software production. Waterfall: Nevermind backlog, requirements were signed off. RAD: Build prototypes faster than discarding them. Offshore outsourcing: Army of cheap developers producing junk. Onshore outsourcing: Same junk, but with expensive developers. Agile: Avoid featuritis; outrun pesky business users. Domain-specific languages: Compress every problem into one-liners. CMMi: Enough Process means nothing's ever wasted. Relational Databases: Code? Who cares? Data lives forever. Model-driven architecture: Jackson Pollack's models into inscrutable code. Web Services: Terrorize XML until maximum reuse achieved. FORTH: backward writing IF punctuation time SAVE. SOA: Iron-fisted governance ensures total calcification. Intentional programming: Parallelize programming... make programmers of everyone. Google as IDE: It's been done, probably in Befunge. Open-source: Bury the world in abandoned code. Mashups: Parasitize others' apps, then APIs change. LISP: With enough macros, one uberprogrammer sufficies. perl: Too busy coding to maintain anyway. Ruby: Meta-programming: same problems, mysterious solutions. Ocaml: No, try meta-meta-meta-programming. Groovy: Faster Java coding, runs like C-64. Software-as-a-Service: Don't write your own, rent ours. Cloud Computing: Programmers would go faster without administrators. Labels:
development, humor Michael Feathers' Blog: The Flawed Theory Behind Unit Testing
michaelfeathers.typepad.com/michael_feathers_blog/... Design by Contract works. Test Driven Development works. So do Clean Room, code inspections and the use of higher-level languages. All of these techniques have been shown to increase quality. And, if we look closely we can see why: all of them force us to reflect on our code. That’s the magic, and it’s why unit testing works also. Labels:
development Michael Feathers' Blog: The Flawed Theory Behind Unit Testing
michaelfeathers.typepad.com/michael_feathers_blog/... software development is a long-haul activity. We need practices which help us achieve continuous discipline and a continuous state of reflection.
Lazy Error Handling in Java, Part 3: Throwing Away Throws « Apocalisp
apocalisp.wordpress.com/2008/06/04/throwing-away-t... what do you think Java’s existing error handling is? It’s a monad. No, really, it is. In fact, Java is one big monad with bells on.
Lazy Error Handling in Java, Part 3: Throwing Away Throws « Apocalisp
apocalisp.wordpress.com/2008/06/04/throwing-away-t... Java’s throws keyword is the Kleisli arrow for Java’s exceptions functor
The Art of AI Sidekicks: Making Sure Robin Doesn't Suck — AiGameDev.com
aigamedev.com/discussion/art-of-sidekicks “AI only needs to be as good as the character’s life expectancy.” That’s the rule of thumb for the AI programming world. Lazy Error Handling in Java, Part 2: Thrower is a Monad « Apocalisp
apocalisp.wordpress.com/2008/05/22/thrower-is-a-mo... Unfortunately, you’ll find that you can’t write a generic Monad class in Java. Poor Java’s type system is not sophisticated enough to understand higher-kinded types, nor would that be sane without type inference in the compiler, which Java also lacks.
Lazy Error Handling in Java, Part 3: Throwing Away Throws « Apocalisp
apocalisp.wordpress.com/2008/06/04/throwing-away-t... what does an Exception give you, really? You get some information about the failure, like an Exception type name, an error message, a stack trace, and possibly a nested Exception. If you know how to recover from an error, are you going to need the stack trace and the error message? No.
It should be abundantly clear that introducing null into a language is not much of a solution to anything. We don’t do that with natural language, and certainly not in formal logic, so why do it with programming languages?
Growing a Language by Guy Steele - good coders code, great reuse
www.catonmat.net/blog/growing-a-language-by-guy-st... Should a programming language be small or large? A small programming language might take but a short time to learn. A large programming language may take a long, long time to learn, but then it is less hard to use, for we then have a lot of words at hand — or, I should say, at the tips of our tongues — to use at the drop of a hat. If we start with a small language, then in most cases we can not say much at the start. We must first define more words; then we can speak of the main thing that is on our mind. […] If you want to get far at all with a small language, you must first add to the small language to make a language that is more large.
Growing a Language by Guy Steele - good coders code, great reuse
www.catonmat.net/blog/growing-a-language-by-guy-st... A main goal in designing a language should be to plan for growth. The language must start small, and the language must grow as the set of users grows.
In theory, spawning threads and processes on linux is pretty much the same. The only difference between starting a thread and a process is flipping a bit to say that the page table needs to be copied on write.
The more static information your
compiler has, the better the object code it can spit out. Epigram
has more static information than we know what to do with.
InfoQ: Oracle's Cameron Purdy Looks at 10 Patterns for Scaling Out
www.infoq.com/news/2008/05/scaling-out Oracle's Cameron Purdy Looks at 10 Patterns for Scaling Out
10 - Understanding the Problem Labels:
scalability, tips reddit.com: Ask proggit: Are there any good discussions of the Erlang runtime?
reddit.com/info/6lf0s/comments/ we shouldn't do Erlang-in-X, we should do X-in-ErlangVM
Labels:
erlang Datawocky: Are Machine-Learned Models Prone to Catastrophic Errors?
anand.typepad.com/datawocky/2008/05/are-human-expe... If Google is unwilling to trust machine-learned models for ranking search results, can we ever trust such models for more critical things, such as flying an airplane, driving a car, or algorithmic stock market trading?
Labels:
machine learning Learning JavaScript Programming Language through Video Lectures - good coders code, great reuse
www.catonmat.net/blog/learning-javascript-programm... World’s most misunderstood programming language - has “Java” in its name and “Script”. It has nothing to do with Java programming language and it’s a real programming language not some tiny scripting language
Labels:
javascript To get one thing that we like, we usually have to give up another thing that we like. Making decisions requires trading off one goal against another.
How Reddit Will (Maybe) Save Software Development : So Jake Says:
www.jakevoytko.com/blog/2008/05/12/how-reddit-will... Programming failures are due to a lack of rigor at all levels. The requirements suck, so the design sucks, so the interaction between modules suck. These problems will continue to persist until development practices assume that the developer and designers are making mistakes, and does everything possible to correct the mistakes early. This will be done, not by a slick methodology from a book, but rather a karma-based social programming application.
Wide Awake Developers: The JVM is Great, But...
www.michaelnygard.com/blog/2008/05/the_jvm_is_grea... Normal attrition means that the largest population of developers will always be the youngest and least experienced. This is not a training problem: in the post-commoditization world, the majority of code will always be written by undertrained, least-cost coders.
Java theory and practice: Stick a fork in it, Part 1
www.ibm.com/developerworks/java/library/j-jtp11137... Hardware trends drive programming idioms
Don't use a computer program as a way to avoid understanding your experimental system, or to avoid making scientific decisions.
realtimecollisiondetection.net - the blog » Design patterns are from hell!
realtimecollisiondetection.net/blog/?p=44 What annoys me more than Design Patterns is when programmers talk about designing for “reuse”. Instead, how about designing for use?
Lesson to the Java community from the CLR community: not all features of the virtual machine have to be exposed in one language. Not even C# or VB do this.
Official Google Blog: What makes a design "Googley"?
googleblog.blogspot.com/2008/04/what-makes-design-... Googley Design Principles:
1. Focus on people—their lives, their work, their dreams. A resume is not a statement of facts. It’s a declaration of intent.
Fifteen/Twenty years ago to approach programming meant to start hacking with C, writing some cool demo accessing directly with VGA registers, learning algorithms and data structures. This is the background where the star developers of today grown, now that everything is an hash table, some nice looking XHTML and few ugly but optimized SQL queries I wonder what the level of developers will be in ten years, and I've no reasons to be optimist.
Laziness is simply a common implementation technique for non-strict languages, but it is not the only possible technique. One major drawback with lazy implementations is that they are not generally amenable to parallelisation.
Don't worry about people stealing your ideas.
If your ideas are any good, you'll have to ram them down people's
throats.
Do not seek to follow in the footsteps of the men of old; seek what they sought.
Technical Revenue: The Young Man's Business Model
paultyma.blogspot.com/2008/04/young-mans-business-... the best business model is one that makes your customer money. I didn't say "saves" them money - big difference.
Google Developers Day US - Theorizing from Data
video.google.com/videoplay?docid=-7111461506729989... It is a capital mistake to theorize before one has data.
reddit.com: Do you buy/download a lot of academic books meaning to read them "later", but really
reddit.com/info/6f0fz/comments/ Eco once said, the value of a library did not lie in its books you have read already. The true value was constituted by the volumes you still had the chance to read ('negative library').
I don’t care if you’re an Operations Research guru or a lone stock trader looking to make a buck, no problem is single-objective.
The CAP theorem coined by Dr. Eric A. Brewer in ‘98 says that any system can have at most two from the following group of properties: Consistency, Availability, tolerance to network Partitioning.
April 1st special: The War of the Worlds | Lambda the Ultimate
lambda-the-ultimate.org/node/2749#comment-41078 Haskell makes a fine imperative language — "the world's finest imperative language", according to Erik Meijer. It only asks that, ideally, you annotate the type of imperative functions - confess their sins, as it were.
The Ten Worst Job Interview Questions Ever | Business Pundit
www.businesspundit.com/the-ten-worst-job-interview... If you’re one in a million, you have 1,000 clones in the People’s Republic of China.
The Secret Diary of Steve Jobs: Google putting up fence and gate to keep execs from leaving
fakesteve.blogspot.com/2008/04/google-putting-up-f... There is something really evil about taking thousands of the world's smartest young people and using them to sell online text ads more efficiently.
Labels:
google, humor [JavaSpecialists 158] - Polymorphism Performance Mysteries Explained
www.javaspecialists.eu/archive/Issue158.html The amazing performance of inlining code should affect how we
code Java. We should stay clear of long methods and rather
break them up more.
[JavaSpecialists 158] - Polymorphism Performance Mysteries Explained
www.javaspecialists.eu/archive/Issue158.html be extra
careful with empty loops that you inserted into your code
instead of Thread.sleep(). Since Java 6, they are in danger
of being removed.
Haskell's pattern matching and operator overloading are responsible for the elegance of the presentation, but it is lazy evaluation that is responsible for the elegance of the computation.
Datawocky: More data usually beats better algorithms
anand.typepad.com/datawocky/2008/03/more-data-usua... First generation search engines had used only the text of the web pages themselves. The addition of these two additional data sets -- hyperlinks and anchortext -- took Google's search to the next level. The PageRank algorithm itself is a minor detail -- any halfway decent algorithm that exploited this additional data would have produced roughly comparable results.
Why does everything suck?: The Death of the Relational Database
whydoeseverythingsuck.com/2008/02/death-of-relatio... How great would it be if when we thought of a new piece of information that we want to capture, we could simply add it to our existing database? Or perhaps if we can add things this easily it is more like a knowledge base than a database.
Why does everything suck?: The Death of the Relational Database
whydoeseverythingsuck.com/2008/02/death-of-relatio... Storing the relationships between objects *in* the objects is a problem.
30 years ago people were writing papers showing that Lisp was better than very badly written Prolog. Now they are writing papers showing that Haskell is better than very badly written Prolog. How things have changed! NOT.
The most common reasons optimization problems can't be solved with Mathematical Programming include:
Level of Implementation of a Pattern
If you're not allowed
to implement new ideas, you stop having them.
Replace "seeks" with "transfers" and "transaction processing" with "MapReduce" and I think over time we'll start seeing Hadoop installations that choose to use large numbers of smaller capacity disks to maximize their processing rates.
Programmers have to start thinking of the disk as a sequential device rather than a random access device. Or the more pithy: "Disks have become tapes".
Monads are incredibly flexible, but as any decent C.S. major knows, everything comes at a price. Monads give a high level of abstraction and can model a huge variety of computations. There's no reason to expect them to be on par with simpler, to-the-point styles of programming.
Here's a summary of what you can do to speed up any functional/immutable-style code, including monadic code when writing in Python:
In the end, it looks like monadic code is about 2-3x slower in Python. Almost all of that is actually the result of just doing things in a functional/immutable way. In particular, creating data structures appears to be the main bottleneck. In functional languagues, these types of operations are very common and optimized heavily, and so are typically very fast. It looks like it's not the same in Python. Just like you have to avoid recursion because there's no tail recursion, it looks like you have to avoid a functional/immutable coding style if you care about performance because object creation is so slow. On the other hand, if you don't mind the peformance hit, it makes the code much more elegant, just like recursion usually does.
programming: DDC - an explicitly lazy dialect of Haskell which supports destructive update,
reddit.com/r/programming/info/6csbi/comments/ D programming language allows dot-syntax for any function whose first argument is a variable of the type before the dot. Syntax matters.
Slashdot | Scientists' Success Or Failure Correlated With Beer
science.slashdot.org/article.pl?sid=08/03/19/02112... Statistics are like miniskirts; they show a lot but hide the most important facts.
Slashdot | Scientists' Success Or Failure Correlated With Beer
science.slashdot.org/article.pl?sid=08/03/19/02112... science and prostitution are primarily about pleasing elderly men with deep pockets :-)
Acid Tripping, Disneyland and Special Relativity
weblog.raganwald.com/2008/03/acid-tripping-disneyl... Lisp guys know all about monkeypatching and dynamism. Those crazy mofos write mind bending macros and morph the language in ways that can only be described as an acid trip inside the ‘it’s a small world’ ride in disneyland
Acid Tripping, Disneyland and Special Relativity
weblog.raganwald.com/2008/03/acid-tripping-disneyl... Python is a language for pedants. That’s exactly why I like it. There’s (almost) always one “correct” way of doing something, and when you do it that way, you get that warm glow in your heart that we pedants get when we outsmart someone or something.
The essence of monads is to use abstract types to enclose a mutable state, providing only a set of carefully-crafted combinators for using it in such a way that you can't duplicate the state but have to use it in a linear, non-branching fashion; that way, the implementation of the monad can use side-effects.
A dead fish in yesterday’s newspaper [dive into mark]
diveintomark.org/archives/2008/03/15/dead-fish if an electronic-trading system receives an XML message for a transaction valued at €2,000,000, and there’s a problem with a missing end tag, you do not want the system guessing what the message meant
Making it stick.: Erlang Criticism Not Unwarranted
patricklogan.blogspot.com/2008/03/erlang-criticism... Jini and Javaspaces are the closest
thing Java has to Erlang/OTP.
If you think C++ is not overly complicated, just what is a protected abstract virtual base pure virtual private destructor, and when was the last time you needed one?
What Lessons are in PAIP?Here is my list of the 52 most important lessons in PAIP:
When classical OO languages (including Ruby and Java) implement inheritance, what actually happens is this: First, the subclass acquires the interface of the superclass (latently typed languages like Ruby don’t do this explicitly, but it is still true). Second, under the hood where you can’t see it, the compiler makes room for a reference to the superclass and arranges for methods that the subclass does not implement to be delegated to the superclass.
In other words, whenever you declare that Child IS-A Person, the compiler writes “Child HAS-A Person” and “Child BEHAVES-LIKE-A Person” and “Child DELEGATES-TO Person” for you. Labels:
oop, inheritance, single inheritance XMF - An extensible langauge for defining DSLs and language oriented programming
www.ceteva.com/nutshell.html XMF has a first class undo mechanism built into its VM. With XMF
state changes can be undone without needing to understand the
precise state changes that have taken place.
Labels:
superlanguages, undo, xmf People have to channel their creativity into changing the process, not changing the software.
Labels:
development, processes Scala is to Java as C++ is to C.
Labels:
scala, java, c++, c InfoQ: CORBA Guru Steve Vinoski on REST, Web Services, and Erlang
www.infoq.com/interviews/vinoski-qcon-interview "If I had to talk to something that was built using CORBA I'd use CORBA. If I was doing some very small scale system that the developers were familiar with the approach, I would use it, but if I had to build an enterprise scale system I would look at REST." -- Steve Vinoski, CORBA Guru
Labels:
corba, rest, development Why is SCTP needed given TCP and UDP are widely available? - ISOC Member Briefing #17
www.isoc.org/briefings/017/ SCTP vs TCP vs UDP
Labels:
networking, protocols, internet, tcp, udp, sctp, comparison Those parentheses look quite different but constitute only a superficial difference from the conventional chicken scratch syntax of semi-colons, braces, full stops, and brackets.
Call-by-name lambda-calculus is strictly more expressive (in Felleisen sense) than call-by-value lambda-calculus, and the call-by-need (aka, lazy) lambda-calculus is observationally equivalent to the call-by-name. [..] Adding control effects (shift/reset) changes the expressivity results. Now all three calculi are distinct and none subsumes the other.
The most efficient languages will be the ones that are most amenable to supercompilation; and the best programming style will be the one that ensures human maintainability and maximizes supercompilability.
The efficiency that direct heap manipulation buys may soon pale before the efficiency that it loses by making supercompilation more difficult.
The EGGG language intentionally has no
flow control; that's why we call it a description and not a program.
The Programmers’ Stone » Blog Archive » Haskell Needs A Four Calendar Cafe
the-programmers-stone.com/2008/02/22/haskell-needs... Gustavo Duarte - A skeptical take on software development and the business thereof.
www.hsdtaxlaw.com/duartes.org/Shuttle.htm The proper way to implement scaffolding, the way that's
actually useful throughout the entire project, not merely at
the beginning, is to introspect class definitions and
generate high level user interface definition data
structures that can later be selectively overridden in a
declarative manner.
One Man Hacking: But Martin, Enterprise Software IS Boring
ravimohan.blogspot.com/2006/07/but-martin-enterpri... "Berlin Wall" effect. In the days of the cold war, to cut through the propoganda of whether Communism was better than Capitalism , all you had to do was to observe in which direction people were trying to breach the Berlin Wall.
Another benefit of the functional style in a statically typed language is that everything that goes into and out of a method
is checked by a type checker, so logic errors are more likely to manifest themselves
as type errors.
Closures have no place in a low-level procedural language whose target audience consists of programmers unwilling to learn to be productive.
Comp.compilers: Re: Henry Spencer's "Tcl" Regex Library
compilers.iecc.com/comparch/article/07-10-026 Spencer's Tcl regex builds the DFA on the fly from the NFA representation, using a cache to speed the DFA simulation. The cache has a fixed maximum size, though, so it can't end up building an exponentially-large machine either.
Mathematics and Computation » Representations of uncomputable and uncountable sets
math.andrej.com/2008/02/06/representations-of-unco... It is meaningless to discuss representations of a set by a datatype without also considering operations that we want to perform on the set.
equations such as those of Euler and Einstein attract value and interest beyond the particular scientific inquiries that gave birth to them. They serve as clear and concise examples of what equations and formulas do: they show how seemingly disparate elements are implicated in a unity, and do so concisely, with few moving parts, so to speak.
UI development is always about dealing with events, and the FSM delivers a structured approach to handling those events.
I/O is asynchronous… the moment an Ethernet packet is in your
network card‘s buffers, the card will (yes, asynchronously) kick (interrupt) your CPU and shout “Hey! There‘s a new packet… use it or lose it, pal!”. what made git awesome was
actually none of the things Linus had talked about, not really. Those
things were more like... symptoms of the underlying awesomeness.
An hygienic macro is one where the meanings of symbols that aren't parameters to the macro are bound at the definition site rather than the expansion site.
programming: Is it even possible to create a "high level CPU"?
reddit.com/r/programming/info/673zc/comments/ The future is a sea of gates, with no difference between storage and computation.
Physicists debug the universe. When the universe doesn't behave as expected, they debug it, trying to reconcile their understanding of the universe and what they are seeing. The difference is that the bug, by definition, is always in their understanding and never in the universe.
Typical Programmer - Relational Database Experts Jump The MapReduce Shark
typicalprogrammer.com/programming/mapreduce/ The big innovation MapReduce enables is distributing data processing across a network of cheap and possibly unreliable computers, pretty much the opposite of the ideal RDBMS ecosystem.
Typical Programmer - Relational Database Experts Jump The MapReduce Shark
typicalprogrammer.com/programming/mapreduce/ MapReduce has the same relationship to RDBMSs as my motorcycle has to a snowplow — it’s a step backwards in snowplow technology if you look at it that way.
Understanding category theory and its practical applications | Lambda the Ultimate
lambda-the-ultimate.org/node/2604#comment-39235 category theory is a refined integration of both set theory and the world of functions
Understanding category theory and its practical applications | Lambda the Ultimate
lambda-the-ultimate.org/node/2604#comment-39235 I think we and other creatures chunk the world into pieces we can understand by finding the mappings and functors and so on which allow us to grok the world. We are, I think, category theory engines.
You learn a natural language once and use it many times. The lesson
for a language designer is that a language should be optimized for
expressive power rather than for ease of learning. It's easy to
learn to drive a golf cart, but it's hard to express yourself in
one.
DevTopics | 101 Great Computer Programming Quotes
www.devtopics.com/101-great-computer-programming-q... “If Java had true garbage collection, most programs would delete themselves upon execution.”
(Robert Sewell) DevTopics | 101 Great Computer Programming Quotes
www.devtopics.com/101-great-computer-programming-q... “C++ : Where friends have access to your private members.”
(Gavin Russell Baker) DevTopics | 101 Great Computer Programming Quotes
www.devtopics.com/101-great-computer-programming-q... (Edsger W. Dijkstra) DevTopics | 101 Great Computer Programming Quotes
www.devtopics.com/101-great-computer-programming-q... “I don’t care if it works on your machine! We are not shipping your machine!”
(Vidiu Platon) Curried functions exist to make partial application easy
Neil’s point-free blog » Haskell: an Imperative Language with Mutable State
neilbartlett.name/blog/2007/04/11/haskell-an-imper... The construction and manipulation of ST and IO actions does actually happen in a purely functional way — it’s running them which requires some extra effects. This seems like a minor point, but it really does end up being important. For example, a function of type (t -> IO s) will compute the same action of type (IO s) when given the same parameter of type t each time. Neil’s point-free blog » Haskell: an Imperative Language with Mutable State
neilbartlett.name/blog/2007/04/11/haskell-an-imper... is Haskell really a pure functional language? In my opinion it is not – it’s much more useful than that. It’s a language that allows imperative programming, but uses its strong type system to keep side-effect-producing code from mixing freely with pure functional code. That makes it uniquely powerful.
older programmers may not burn as much midnight oil as younger ones, but that's not because they are old, but because they get the job done without having to stay up past midnight.
the pros and cons of lazy evaluation as a default in Haskell: Pros:
Cons:
Peyton-Jones concludes that laziness is a "hair shirt", but that it "keeps you honest" (by keeping implementors from sneaking in side-effects). Andrey Khavryuchenko himself » Blog Archive » Why I don’t give fixed price. Software developer
a.khavr.com/2007/12/24/why-i-dont-give-fixed-price... An attempt to minimize risk in a software project is similar to an attempt to calculate an outcome of tennis match from the names of players and the brand of rackets. Do really any rational tennis player try to set the game plan ahead?
Target? TARGET? We don't need no stinkin' Target! - The Panda's Thumb
www.pandasthumb.org/archives/2006/07/target_target... An evolutionary algorithm acts as a probability amplifier
Pseudo scientific Software Engineering — 2007-12-15 — kirit.com
www.kirit.com/Blog:/2007-12-15/Pseudo%20scientific... Software engineering is pseudo science and rightly so. It will continue to be so right up until the point when users and businesses can give us software specifications with a set of axioms we can use to derive our proofs from. Right now we're lucky if we get a list of conjectures to work from.
Centralization is a bug
An error is "a deviation between
what the program is supposed to do" and what it is observed to do.
programming: I build sites in PHP.. should I stop? What is as easy to get going but is "better" to
programming.reddit.com/info/62shw/comments/ It's very easy to make mistakes in Haskell, but very hard to make them compile
Companies buy startups because they're afraid their competitors
will.
Every open system develops towards the unusable
Human languages differ not so much in what you can say but in what you must say
object-oriented languages have succumbed to static thinkers who worship perfect planning over runtime adaptability, early decisions over late ones, and the wisdom of compilers over the cleverness of failure detection and repair
A paradigm fails when the narrative it embodies fails to speak truth or when its proponents embrace it beyond reason.
constructive nonconformist: The Back Button is Not an Undo Button
jrdodds.blogs.com/blog/2006/04/the_back_button.htm... The ‘back as undo’ argument is often supported by a usability study that shows mere mortal users depend on using the back button as an undo. I think that’s a little bit like using a study that shows automobile drivers speed up on a yellow light to argue for swapping the meanings of green and yellow traffic signals.
The lambda calculus and combinators can be implemented using reference counting
to collect "garbage", because these models do not require directed cycles.
Many implementations do use directed cycles, however, for "efficiency" in
implementing the Y combinator used to express recursion. However, even with
these Y combinator loops, reference counting can still be used to collect
garbage, because the Y loops are well-structured
If you want to build a ship, don’t drum up the men to gather wood, divide the work and give orders. Instead, teach them to yearn for the vast and endless sea. —Antoine de Saint-Exupery "The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity" -- Edsger Dijkstra
"Testing can only prove the presence of bugs, not their absence."
-- Edsger W. Dijkstra
Overloading Semicolon, or, monads from 10,000 Feet at Oliver Steele
osteele.com/archives/2007/12/overloading-semicolon Java and C++ have typed variables; Haskell has typed statements
fixing this defect [adding tail call elimination to the JVM] is not in Sun’s interest (nor that of IBM). In fact, doing so may well speed up the death of its programming language by many orders of magnitude
both
pipes and lazy lists behave exactly like coroutines
constructive nonconformist: Theory P: Software Development is Probabilistic
jrdodds.blogs.com/blog/2007/11/theory-p-softwa.htm... Have you seen a car ad that shows a factory floor and an efficient automated assembly line? That’s not like software development. Have you seen a car ad that shows a design studio with a clay mock-up? That’s like software development. The guy on the factory floor can easily know how long it takes to assemble an automobile. It’s much more difficult for the guy sculpting clay to predict how much work and how many revisions it will take to get to the final design.
There’s No Hope For IT :: Steve Vinoski’s Blog
steve.vinoski.net/blog/2007/10/29/theres-no-hope-f... You cannot offset your lack of architectural vision by using some framework, product or vendor
The Curse of Knowledge and the Semantic Web - Blog - Semantic Focus
www.semanticfocus.com/blog/entry/title/the-curse-o... The Curse of Knowledge: the more you know, the more difficult it is for you to communicate knowledge
Good Math, Bad Math : Erlang: a Language for Functional Concurrency
scienceblogs.com/goodmath/2007/11/erlang_a_languag... concurrency is a bit like quantum mechanics - if you don't think it's hard you probably haven't thought about it enough
What if powerful languages and idioms only work for small teams?
weblog.raganwald.com/2007/11/what-if-powerful-lang... Willie Sutton is famous for stating the obvious. When asked why he robbed banks, he replied, “Because that’s where the money is.”
Before digital computers could do much of anything,
Alan Turing demonstrated what they could never do
Programming is the art of figuring out what you want so precisely that even a machine can do it
Somehow it always turns out that you "couldn't see any reason it wouldn't work" because you were ignorant of the obstacles, not because no obstacles existed
When the basic problem is your ignorance, clever strategies for bypassing your ignorance lead to shooting yourself in the foot
Continually ask yourself: "How would I regenerate the thought if it were deleted?" When you have an answer, imagine that knowledge being deleted as well
If you substituted randomized symbols for all the suggestive English names, you would be completely unable to figure out what G1071(G1072, 1073) meant. Was the AI program meant to represent hamburgers? Apples? Happiness? Who knows? If you delete the suggestive English names, they don't grow back.
ConalBlog: Tangible Functional Programming: a modern marriage of usability and composability
conal-elliott.blogspot.com/2007/11/tangible-functi... The common practice of mixing IO with functionality inhibits composability whether in C or in Haskell
The best question asked this week: What, exactly, are you trying to prove?
weblog.raganwald.com/2007/11/best-question-asked-t... To prove the correctness of code, you need to know exactly what correct behavior is for the code, i.e. a complete and unambiguous specification for what the code should do. So tell me dear reader, when was the last time you received an unambiguous fully detailed specification of an application? programming: An ABC of Category Theory - aimed at potential users of categorical ideas rather than
programming.reddit.com/info/60w1m/comments/ As an engineer, I've noticed that math people seem to think applying math is using one theorem to prove another :P
So, Android is a Google flavor of Java ME? - Android Developers | Google Groups
groups.google.com/group/android-developers/msg/509... The choice of Java makes so much sense in that it provides the phone
with much needed protection against sloppy programming. Correct me if I'm wrong but the chips in typical handsets don't implement virtual memory in the same way a i386 does, so the potential for bad userspace code to panic the OS is significant. By running apps in a Java VM, the OS is protected. Web Marketing no longer is limited to your corporate site. Let go of the concept of ‘driving traffic to your website’ as a sole measurement of success.
Dr. Dobb's | A Simple and Efficient FFT Implementation in C++, Part I | May 10, 2007
www.ddj.com/cpp/199500857 Fast Fourier Transformation (FFT) is not only a fast method to compute digital Fourier transformation (DFT)—having a complexity O(Nlog(N)) (where N must be power of 2, N=2P), it is a way to linearize many kinds of real mathematical problems of nonlinear complexity using the idiom "divide and conquer."
eigenclass - Addressing the ORM problem, typed relational algebra
eigenclass.org/hiki/addressing-orm-problem-typed-r... Query composition is sorely missing in most ORMs; you normally do some query
and get in return a number of objects in some sort of container, which can be
as simple as an array. You cannot compose queries, all you get is rows.
In other words, they abstract at the wrong level, focusing on rows instead of
relations.
Do Messages Want to Be Asynchronous? - Beautiful Code
beautifulcode.oreillynet.com/2007/10/do_messages_w... If you ask an object for some data, massage it, and then pass it back to the same object, you’ve found an operation which probably belongs on that other object.
Those who cannot remember the past are condemned to repeat it.
Most systems fail to gain popularity not based on their code quality, but on their documentation.
Processors don't get better so that they can have more free time. Processors get
better so _you_ can have more free time.
Haskell IO is not only the most-organised IO, it is also the
easiest. It's sad that disappointed _expectations_ in programming languages are
often transcribed as difficulty. Learn that not every language is C++ with a
virtual machine.
never pay for space performance (on a 64-Gig RAM machine)
with bugs.
Never blame a paradigm. Blame an implementation of a
paradigm.
Even assembly has lazy evaluation.
A jump is basically the most primitive mode of lazy evaluation.
On the Tension Between Object-Oriented and Generic Programming in C++
www.artima.com/cppsource/type_erasure.html "I find OOP technically unsound." "I find OOP philosophically unsound." "I find OOP methodologically wrong." "I have yet to see an interesting piece of code that comes from these OO people." "I think that object orientedness is almost as much of a hoax as artificial intelligence." All the quotes above are from an interview with Alexander Stepanov[3], the inventor of the STL and elder statesman of generic programming. programmers should worry less about languages and more about
good old complexity
Trust the programmer, as a goal, is outdated in respect to the security and
safety programming communities.
-- The C1x Charter* (for the next C standard) raw speed on one core, sequentially, is obsolete speed
The Haskell language doesn't provide any way to express
order of evaluation... except for data dependencies
An abstraction is one thing that represents several real things equally well.
Continuations as a concept are useful for maintaining the state machine of a long-term process like a workflow, bug report, that sort of thing. They suck at short-term GUI interactions for the simple reason that they are very attractive to linear-thinking programmers. Thus, the linear-thinking programmer tries to turn the user into a peripheral, rather than leaving the user in control of the UI. This leads to UI that sucks you-know-what.
'Personally, I think the height of computing was cron.' (reddit.com)
programming.reddit.com/info/2yjoc/comments Unix is just like Churchill's observation of Democracy - it sucks, but it sucks a bit less than everything else.
Eli Bendersky’s website » Blog Archive » A taxonomy of typing systems
eli.thegreenplace.net/2006/11/25/a-taxonomy-of-typ...
Rebel Science News: Parallel Programming, Math, and the Curse of the Algorithm
rebelscience.blogspot.com/2007/10/parallel-program... in a true parallel programming model, parallelism is implicit but sequential order is explicit
Basic Speed Optimizations for the Evil : So Jake Says:
www.jakevoytko.com/blog/2007/10/07/basic-speed-opt... Always profile your code when you want to improve it. No exceptions.
A Gecko developers advice on writing a new browser engine (reddit.com)
programming.reddit.com/info/2xlwd/comments Every time you manually reassign a variable, you're separating your program into two parts (where the variable has two different values). Statically proving that you will never use those two variables inconsistently is virtually impossible.
Unfortunately,
Haskell is unlikely to be learned in a few days. Fortunately, Haskell is
likely to revolutionize minds in a few days.
Notes on Haskell: Defanging the Multi-Core Werewolf
notes-on-haskell.blogspot.com/2007/10/defanging-mu... authenticating a user doesn’t get 32x faster on a 32-core machine
How much use of CLOS? - comp.lang.lisp | Google Groups
groups.google.com/group/comp.lang.lisp/msg/60f4c36... CLOS offers freedom. It can be very
hard to deal with freedom if what you were looking for in an OO system was a way to cage yourself in. The software crisis is the result of serious flaws in the imperative
languages.
These flaws are not, however, the result of weaknesses inherent in
the whole von Neumann approach; but rather the product of design error.
the features and fixes that allow the programmer to get close to
the machine are exactly those which cause all the trouble.
These are the features that the Greenhorns come to grief with,
that the Wizards have trouble analyzing, that the Preachers denounce as evil,
and that the Home Handymen are forever repairing
The weakness (of nonprocedural, purely definitional languages) underlined by Dijkstra
is not an
inherent weakness; it is a weakness of a
particular method of implementing a particula
kind of nonprocedural language.
Programs have to be implemented, even
implemented efficiently,
but that ... is entirely the concern
of the engineers.
Programmers, according to this view, need not know anything about how the
program is to be run - they should understand it from the mathematical
point of view alone.
Escardó’s
algorithm represents a set of integers by a lazily evaluated
binary tree of bits
The "X Improves My Design Anyway" Myth « Sententia cdsmithus
cdsmith.wordpress.com/2007/09/29/the-x-improves-my... Monads can be verbose and difficult to use in Haskell, but that makes people wary about using monads, which improves design
Confessions of a Terrible Programmer: 0. Admit being bad. 1. Type-check in language. 2. Assertions.
programming.reddit.com/info/2tx1k/comments/c2tzt4 Well-defined, strong, extensive type systems (such as Ada's, OCaml's or Haskell's) are test cases that were already built for you by the authors of the language
Stevey's Blog Rants: Ten Tips for a (Slightly) Less Awful Resume
steve-yegge.blogspot.com/2007/09/ten-tips-for-slig... Tech certification: it means you had to take a course to learn something you could have read in a book
Lightweight Languages are not lightweight in the sense of ease of implementation, but they are called lightweight because of their intention to lighten the workload of the programmer. Brevity is one element that helps make code beautiful. As Paul Graham says, “Succinctness is power.” In the vocabulary of programming, brevity is a virtue. Brevity can also mean the elimination of redundancy. Redundancy is defined as the duplication of information. In order to eliminate redundancy, we follow the DRY principle: Don’t Repeat Yourself. The concept of DRY is the antithesis of copy-and-paste coding. Simplicity is the next element of beautiful code. We often feel beauty in simple code. When simpler tools are used to solve a complex problem, complexity is merely shifted to the programmer. Balance is the final element of beautiful code. So far I have talked about brevity, conservatism, simplicity, and flexibility. No element by itself will ensure a beautiful program. Comparing productivity: LisP against C++ (was Re: Reference Counting) - comp.lang.lisp | Google Grou
groups.google.com/group/comp.lang.lisp/msg/5bb9a3a... When your hammer is C++, everything begins to look like a thumb.
One of the benefits of wider adoption is, indeed, having a wider set of libraries - it's a "positive network externality" in terms of economics.
Nabble - Haskell - Haskell-Cafe - transparent parallelization
www.nabble.com/transparent-parallelization-t447538... Automatic parallelization is easy, efficient parallelization is hard.
InfoQ: Language-oriented programming : an evolutionary step beyond object-oriented programming?
www.infoq.com/news/2007/09/Language-oriented-progr... The abstraction level should be upgraded by using languages rather than object hierarchies as a modelling mechanism.
InfoQ: Language-oriented programming : an evolutionary step beyond object-oriented programming?
www.infoq.com/news/2007/09/Language-oriented-progr... Object-oriented domain modelling allows to “build up a vocabulary” but the grammar – ways to combine these vocabularies – is not defined; DSLs add this grammar side.
Quintessential computer science: first
write a program to specify the problem, then interpret the program
creatively to find the solution before the universe ends.
Actors are computational agents which map each incoming communication to a 3-tuple consisting of:
Worse Than Failure - They can't force me to use Java
forums.worsethanfailure.com/forums/thread/130555.a... The "anything that gets the job done" attitude only works when the author is expected to maintain his own work forever
![]() A closure is a function that captures the bindings of free variables in its lexical context. Nabble - Haskell - Haskell-Cafe - Can somebody give any advice for beginners?
www.nabble.com/Can-somebody-give-any-advice-for-be... Programmer's
Nirvana plane --------------- Categoric plane --------------- Co-Monadic plane (Co- everything) ----------------- Applicative plane ---------------------- Pointless-pointfree plane ------------------------------ Monadic plane (don't get trapped) --------------- --------------- Functional plane (Haskell et al!) --------------- --------------- Imperative plane ASM, C#, Java :) --------------- --------------- Physical plane (e.g. Silicon) Those who do not
become computer scientists to the second degree risk turning into
programmers who will only implement the ideas of others.
TVs don't have reset buttons. Stereos don't have reset buttons. Cars don't have reset
buttons. They are full of software but don't need them. Computers need reset buttons because their software crashes
a lot.
An
education in engineering and science is an education in intellectual
honesty.
Google Code for Educators - Introduction to Distributed System Design
code.google.com/edu/parallel/dsd-tutorial.html Closure (computer science) - Wikipedia, the free encyclopedia
en.wikipedia.org/wiki/Closure_(computer_science) Lazy functional languages such as Haskell bind variables to a result of a computation in the future
Most of the fun stuff in a software project happens early
on, when anything’s possible and there’s a ton of new code to write. By the
end of a project, the design is carved in stone, and most of the work involves
fixing bugs, or trying to figure out how to shoehorn in yet another feature
that was never planned for in the original design. All that is a lot less fun
than starting a project
The Java virtual machine is an abstract computing machine.
An abstract machine implemented as a software simulation, or for which an interpreter exists, is called a virtual machine.
λ Tony’s blog λ » Blog Archive » A Fling with Lazy Evaluation
blog.tmorris.net/a-fling-with-lazy-evaluation/ It is impossible to write && in Java yourself.
/dev/websphere: Tuning for multi-core: First, the easy stuff
www.devwebsphere.com/devwebsphere/2007/09/tuning-f... instead of having a single RWLock, lets have say five. A thread can obtain a read lock by acquiring a read lock on any of the five. A thread can obtain a write lock only when it gets a write lock on all 5. This penalizes the writer but allows much more concurrency (five fold) for the common case that is reading.
The average business is not interested in "hot trends in programming". Only programmers are.
a cleverly marketed C-like language built to drive toasters was never going to be the last word in computer science
"Using a scripting language is like going to McDonalds. The food is quick and tastes great, but the time you spend on the toilet after just isn't worth the whole experience." -- Bill Burke
The idea of quantum computing is to set up a massive double-slit experiment with exponentially many paths — and to try to arrange things so that the paths leading to wrong answers interfere destructively and cancel each other out, while the paths leading to right answers interfere constructively and are therefore observed with high probability.
What Comes To Mind: Monads, REST and C++ Template Metaprogramming
www.sdowney.org/2007/01/monads-rest-and-c-template... Every time you wish that you didn't have to write some type that the compiler already knows, like the iterator or value_type or return_value, particularly when they get really messy, you're looking for what Monads, or at least what Hindley-Milner type inference, provide.
What Comes To Mind: Monads, REST and C++ Template Metaprogramming
www.sdowney.org/2007/01/monads-rest-and-c-template... Monad transformers show a degree of generic reusability that is awfully hard to achieve with C++ templates, even though C++ templates have similar expressive power
Improved Means for Achieving Deteriorated Ends / The State of State
www.redlinernotes.com/blog/?p=811 For in-memory transactions on a single CPU, the overhead of transactions can be brought down to <2X in reasonable cases. Across the network, where latencies are 1,000,000 times higher, message passing seem like the only plausible approach.
It's not merely true that organizations dislike the idea of depending
on individual genius, it's a tautology. It's part of the definition
of an organization not to.
iScreen 1.1.0 released: POJO Validation Framework
www.theserverside.com/news/thread.tss?thread_id=44... Validation is not designed to handle/support real business logic. Validation is a means to ensure that the data an object (or object graph) contains meets certain standards. It makes no judgment upon how that data fits within the overall business model. Business logic (and rules engines) represent decision-making capabilities. Validation engines don't. A program listing is a document that represents a software design. Compilers and linkers actually build software designs.
MIT startup raises multicore bar with new 64-core CPU: Page 2
arstechnica.com/articles/paedia/cpu/MIT-startup-ra... RISC philosophy: "show
everything to the compiler and let compiler writers manage the
complexity"
On The Internet Nobody Knows You're a Lambda (reddit.com)
programming.reddit.com/info/2ggry/comments The Lisp Before the End of My Lifetime « Metalinguistic Abstraction
metalinguist.wordpress.com/2007/08/04/the-lisp-bef... Herding lisp programmers is about as tough as herding cats armed with machine guns.
Erlang as an OO language — 2007-08-09 — kirit.com
www.kirit.com/Blog:/2007-08-09/Erlang%20as%20an%20... “sequential Erlang” is a functional programming language… “concurrent Erlang” is an object-oriented language.
Tao, may be told, but that once is being told is no longer the Eternal Tao
If the chance of the
software failing is made smaller than the chance of the hardware
failing (or of the user spontaneously combusting, or whatever),
there's little to worry about.
-- Bruce Schneier Given enough iterations, every design will involve the kitchen sink
Archives of the Caml mailing list > Message from Diego Olivier Fernandez Pons
caml.inria.fr/pub/ml-archives/caml-list/2003/04/d9... Zippers may be seen as 'functional pointers' since they offer :
- purely functional and typed operations - O(1) acces to the pointed element - O(1) pointer movements The restrictions are that only one pointer is allowed by data structure and every pointer movement allocates memory. Notes on Haskell: Haskell: more than just hype?
notes-on-haskell.blogspot.com/2007/08/haskell-more... Both languages are slowly converging on nirvana: C# is getting more pure, and Haskell is getting more useful.
It is this interplay between language features like purity and
polymorphism, leading to code with the qualities of precision
engineering, that makes Haskell so addictive
make something idiot-proof and someone will invent a better idiot
An epiphany about Functional Programming and Lazy Evaluation « Programblings
webmat.wordpress.com/2007/08/12/an-epiphany-about-... When specifying a computation in a programming language, functional programming language's non-strict semantics is to the detailed, manual sequencing of operations what garbage collection and automatic memory management is to the detailed, manual management of memory.
An epiphany about Functional Programming and Lazy Evaluation « Programblings
webmat.wordpress.com/2007/08/12/an-epiphany-about-... Java’s allocation of memory on the heap requires around 10 processor operations instead of 60 to 100, for the best C++ compilers.
What is coupling, really? | Lean Software Engineering
leansoftwareengineering.com/2007/08/08/what-is-cou... source code can only describe what we want the system to do, and not what the system actually does (???)
Ask Reddit: What is Haskell good for? (reddit.com)
programming.reddit.com/info/2bxc1/comments/c2dins data constructors can be thought of as temporary place-holders to be filled in with other functions later, and data structures would then represent whole control flows waiting to happen
Re: a regressive view of support for imperative programming in Haskell
article.gmane.org/gmane.comp.lang.haskell.cafe/272... one of the key principles in the design of Haskell has
been the insistence on purity. It is arguably what led the Haskell
designers to "discover" the monadic solution to IO, and is more generally what inspired many researchers to "discover" purely
functional solutions to many seemingly imperative problems. With
references and mutable data structures and IO and who-knows-what-else
to support the Imperative Way, this discovery process becomes stunted.
Meme Agora: Dependency Injection in One Sentence
memeagora.blogspot.com/2007/08/dependency-injectio... Dependency Injection enables a vitally important but nevertheless weak, limited, syntactically confounding, and dauntingly complex form of one of the kinds of meta-programming that should exist in the language
The IO type indicates the possibility of side effects, not the certainty!
Hiring Programmers and The High Cost of Low Quality
developers.slashdot.org/comments.pl?sid=262509&cid... There's no one programmer who does the work of ten other programmers. One uber-programmer does just as much work as one ordinary programmer. It's just that the results solve ten times as many problems.
Many people dislike C++ for what they think it is, rather than what it actually is. There's plenty to dislike about it as a language, but don't let that fool you into thinking that it's power and expressiveness is in the same league as Java or C#.
One Laptop Per Child (OLPC) - What's in it for Java?
www.javalobby.org/forums/thread.jspa?messageID=921... You're probably looking at the parentheses. Look at the code instead.
If what you did yesterday still looks good to you,
then your goals for tomorrow are not big enough.
-- Ling Fu Yu, ca. 600 BC.
A formal proof of a proposition is a chain of logical deductions leading to the proposition from a base set of axioms.
Interview with Con Kolivas part 1: computing is boring | APC Magazine
apcmag.com/6759/interview_with_con_kolivas_part_1_... Computers of today may be 1,000 times faster than they were a decade ago, yet the things that matter are slower. The standard argument people give me in response is 'but they do such more these days it isn't a fair comparison'. Well, they're 10 times slower despite being 1000 times faster, so they must be doing 10,000 times as many things. Clearly the 10,000 times more things they're doing are all in the wrong place. quintessential computer science: first
write a program to specify the problem, then interpret the program
creatively to find the solution before the the
universe ends.
Norvig's Lawwill never double again (in any number of months). inheritance is not essential to Object Oriented Programming. The essential features of OOP is Identity, Encapsulation and Polymorphism. Inheritance is only a means to achieve polymorphism in a statically typed language
implementation inheritance is best done via delegation
Programmers Need To Learn Statistics Or I Will Kill Them All
www.zedshaw.com/rants/programmer_stats.html I see software developers begging for gazillions of dollars to buy some crap tool that
doesn’t even mention “standard deviation”, but throws “user” around like it’s Dr. Phil treating
Robert Downey Jr. for heroin addiction.
Programmers Need To Learn Statistics Or I Will Kill Them All
www.zedshaw.com/rants/programmer_stats.html Knuth once said:
“Beware of bugs in the above code; I have only proved it correct, not tried it.”
We want Arc to be good for writing programs, and
one way to ensure that is to start writing programs while the language is
still malleable
coding, by Derek Young: The Curse of The Elegant Languages
dmy999.com/article/23/the-curse-of-the-elegant-lan... the amount of good software written in a language is inversely proportional to the elegance of that language
You hardly ever need to use explicit recursion in Haskell. Every
useful way of doing recursion has already been captured in some higher order function. The Fishbowl: Understanding Engineers: Feasibility
fishbowl.pastiche.org/2007/07/17/understanding_eng... When an engineer says something is "non-trivial," it's the equivalent of an airline pilot calmly telling you that you might encounter "just a bit of turbulence" as he flies you into a cat 5 hurricane.
Agence Levallois » Blog Archive » Lisp is a wonderful Lisp
arcanes.fr.eu.org/~pierre/blog/2007/07/lisp-is-a-w... freedom gives you power, but not everybody is able to exercice freedom
A Train of Thought - July 10th 2007 Edition - Jeremy D. Miller -- The Shade Tree Developer
codebetter.com/blogs/jeremy.miller/archive/2007/07... Switch statements and deeply nested if/then statements are to logic bugs as stagnant water is to the mosquito population
The Programming and Management Blog » What motivates programmers?
blog.assembleron.com/2007/07/11/what-motivates-pro... If you give a programmer a job that does not involve solving something they will become unhappy.
Why don’t Haskell Developers Use Windows? « Sententia cdsmithus
cdsmith.wordpress.com/2007/07/06/why-dont-haskell-... Since Haskell does not attract the sort of people who are slaves to their platform, that means there are fewer people developing Haskell with Windows.
where a Zipper gives O(1) mutation of an element, a Zipper2 gives O(1) splicing
Feynman had a way of focusing in like a laser on any specialized knowledge he wanted to absorb from someone.
java.net: Three Rules for Effective Exception Handling
today.java.net/pub/a/today/2003/12/04/exceptions.h... Exceptions are a tremendous debugging aid because they help answer these three questions:
When exceptions are used effectively, what is answered by the type of exception thrown, where is answered by the exception stack trace, and why is answered by the exception message. <dsully> please describe web 2.0 to me in 2 sentences or less.
<jwb> you make all the content. they keep all the revenue. Haskell/Zippers - Wikibooks, collection of open-content textbooks
en.wikibooks.org/wiki/Haskell/Zippers Don't get impatient, you cannot solve problems by coding, you can only solve them by thinking.
The path to “flow”:
When I want to eat cake, please do not offer me flour, eggs, and sugar.
Why Are ALL Programming Languages So Low Level? | Lambda the Ultimate
lambda-the-ultimate.org/node/1546 In Haskell, there's no manual memory (de)allocation, concurrency's expressed through composable memory transactions, there are no loops beyond what you build out of recursive functions, the compiler handles evaluation order, types are expressed as sum-of-product rather than bunches of bits, and you can't update arbitrary memory locations.
It is much more difficult to
try to guess internal structure just from the observation of behavior
than it is to create the structure that gives the behavior.
In Lisp, you don't just write your program down toward the language, you also build the language up toward your program. Language and program evolve together. When you work bottom-up, you will get a larger language with more abstract operators, and a smaller program written in it.
Gmail - [Haskell-cafe] New New newbie question/help
mail.google.com/mail/?fs=1&tf=1&view=cv&search=all... Personally, I prefer to read fromIntegral :: (Num b, Integral a) => a -> b like: IF (b is a Num) AND (a is an Integral) THEN (fromIntegral is defined and is a function from a to b) JBoss Workflow JBpm and JBoss Rules (Drools) - Technology in plain English - Dublin Ireland
www.firstpartners.net/blog/technology/uncategorize... a workflow engine (or Graph Oriented Programming in general) is about specifying a graph that represents an execution. The nodes can represent wait states. a rules engine is about specifying a set of rules and then applying an inference algorithm for a given set of facts. So given a set of rules and a set of facts and an inference algorithm, there is one calculation that results from it. It’s a one shot calculation that possibly creates new facts or modifies the input facts. The rules are a form of if-then-else statements and the inference algorithm specifies how these rules will be applied at runtime. One crucial difference between the workflow/BPM and rules is the fact that rules engines do not support wait states. And that is not necessary either because rules don’t specify any form of execution. The overlap is to be found in state transitions in workflow/BPM engines. Processes in workflow or BPM can be considered as state machines. Then one state transition can related to one application of facts to a set of rules by a rules engine. For each state transition in a workflow/BPM process, you could think of a set of rules that will calculate the next state from a given state. So in theory you could model all state transitions of a workflow/BPM process in terms of rules, but the wait states will remain the gaps. Those wait states are not representable in rules or facts. A
closure is an encapsulation of a lambda
abstraction with its total environment. This
environment consists of all the names of
abstractions that this lambda abstraction has
access to. Access to names in a lambda abstraction is
controlled by the so called 'lexical scope'. Lexical
scope can also be described as the context of a
lambda abstraction in the program text.
Ask Reddit: Are you in IT, and considered as valuable as the copier? (reddit.com)
programming.reddit.com/info/20zg5/comments Happiness comes from being in a flow state, which is when you are working on problems that are just as big as take your full expertise to handle
Large Systems Suck
This rule is 100% transitive. If you build one, you suck. It is easy to lie with statistics, but it is easier to lie without them.
True randomness consists of a mixture of
clumps and non-clumps. Randomness is different from homogeneity.
Data in Haskell is like Schrodinger's famous undead cat - it doesn't
'exist' until you 'obverse' it. Project management is a social problem. It is 99.5% about getting everyone who knows something about the state of the project to share what they know with everyone else. Getting all the relevant information is 99.5% of the problem, analyzing the information is 0.5% of the problem.
Wolfram Blog: Computable Data Functions: A Crazy Idea That Just Works
blog.wolfram.com/2007/05/computable_data_functions... Stop thinking about data as something in a table, or a database, and start thinking about it just like any other mathematical function.
Allowing Business Users To Program Your System Is A Recipe For Disaster
haacked.com/archive/2007/06/03/allowing-business-u... The solution is not to make programming more like the way business users work now. The solution is to apply the lessons learned from software development into other business processes.
Pick a data structure that embeds the semantics of the domain
you're modelling and your life will be easier.
Keep your code
pure, so you can test harder, and the bugs will stay far
away.
Too Much Code: Why Java lost its mojo, and what Sun is doing about it
toomuchcode.blogspot.com/2007/05/why-java-lost-its... The JRE is becoming the new POSIX
OptimizationOptimization is generally viewed as the purposeful act of improving something under a set of circumstances. It is also generally viewed as a beneficial and useful process. I take exception to this. Optimization is good only when important choices are final -- and they usually aren't. An optimized system has lost some of its freedom to become something else. Any choice that is optimized for a particular set of conditions will be harder to adapt to other conditions than if it were not as optimized. Optimization can only take place in one direction at a time (although that may consist of several conditions). If you want a change of direction, you will need to backtrack somewhat and start over. If you want a radically different solution, you may need to backtrack very far, and start all over again. The further you have progressed in one direction, the harder and more costly the change will be, because you may need to progress equally far in another direction before you get a system that is equally "good". This is why software systems are often discarded instead of attempted improved in a different direction. This is why software systems should be discarded instead of improving them in unintended directions. Optimization means loss of freedom to navigate the solution space. As such, it should not be performed prematurely, and if at all possible, should be done by machine, such that whatever the human being sees is more intent than implementation. Examples of premature optimization include: explicit typing in programming languages, and explicit layout specification in electronic documents, both in office documents and on the WWW. Unfortunately, designing any kind of system that is intended to be optimized by machine brings the implementation to a much higher level of abstraction, and few people can handle it unless trained not to think in terms of direct manipulation of the objects of the final product. Regardless of how you distinguish patterns from recipes, the programming language that you think in will be the programming language you design for.
Invisible wrote:
>>>> int main() >>>> { >>>> typedef std::istream_iterator<std::string> Is; >>>> typedef std::ostream_iterator<std::string> Os; >>>> std::set<std::string> t((Is(std::cin)), Is()); >>>> std::copy(t.begin(), t.end(), Os(std::cout, "\n")); >>>> } > OK then. > main = interact $ unlines . sort . nub . words Pwned! If we assume the upper bound on the computational power needed to simulate
the human brain, i.e. if we assume enough power to simulate each neuron individually
(10^17 ops), then Moore's law says that we will have to wait until about 2015 or 2024 (for
doubling times of 12 and 18 months, respectively) before supercomputers with the requisite
performance are at hand.
Good UI is hard. Not just the design, but the programming too. Coding an elegant UI is an endless process of fixing twitches, hitches, and glitches that no one will ever see or know about. When done well, the end result is a smooth, elegant, effortless UI interaction, but your customer won’t recognize the tireless effort you put in to make it happen. And that’s how it should be.
Easylanguage: domain specific language for trading stocks | Lambda the Ultimate
lambda-the-ultimate.org/node/2201 It's disconcerting to me writing in a language where some words are necessary and others are not, but are usually put in so programs read more like English. Maybe the problem is that the syntactic flexibility obscures the fact that the computer is not interpreting English, and that programming is still a precise activity.
Another nice advantage of using purely-functional data-structures is that they make it easy to implement temporal-databases that let you perform time-dependent queries.
I just wanted to point out that if all you have is quick-reads then purely-functional is no different than a simple ReadWrite lock and that a super-pure implementation, as with Haskell, doesn't scale to multiple-CPU's or to highly concurrent updates. However, it can be used to good effect in combination with striping or other techniques. (A tangential note: Java's GC is getting so good in recent releases that P-F data-structures are becoming much more efficient (given that P-F generates more garbage).) p.p.s. One more advantage of functional data-structures (the largest advantage for me actually): They map well to log(or journal)-based storage. Functional data-structures never update old data, but instead, just create new versions. If your data-structure uses disk-based storage then this means that you never need to go back and overwrite your file; you only need to append data to the end of the file. This has two advantages:
Faith, Evolution, and Programming Languages from Google EDU
www.theserverside.com/news/thread.tss?thread_id=45... Generics in Java evolved directly from Haskell type classes
"Have you ever seen people put a link in their profile to their HotOrNot picture, saying "Go here and vote me a 10!!"? Similar to the people who send links to their friends and say, "I just posted this, please Digg this for me!" The difference is that on HotOrNot, it doesn't work. On HotOrNot, you can cast votes for a picture in one of two ways. The first way is to go directly to the URL for someone's picture; the second way is to load the front page, where a random picture from the database is selected at random, and vote for whatever picture comes up. The catch is that the votes that you cast by going directly to someone's picture, are simply ignored in calculating the average score for that photo. The only votes that are counted are the votes cast for random pictures displayed on the front page. So if you want to manipulate the voting for your own photo, you'd have to load the front page hundreds of thousands of times waiting for your own picture to come up repeatedly, which is hard to do without being detected.
![]() ![]() Starting out on Forth - comp.lang.forth | Google Groups
groups.google.com/group/comp.lang.forth/msg/5f7da0... Any given problem has a certain intrinsic level of complexity. In the
solution of the problem, this complexity will be conserved: if you dive in with too little advance thought, your solution may become very complex by the time it's done. On the other hand, if you invest more in thought, design, and preparation, you may be able to achieve a very simple solution (the complexity hasn't gone away, it's become embodied in the sophistication of the design). [Haskell] Newbie: what are the advantages of Haskell?
www.haskell.org/pipermail/haskell/2007-April/01939... > Aren't Haskell's advantages outweighed by its complexity (Monads, etc.) and rigidity?
I can sometimes feel that Haskell looses out on not being user friendly in the Java sense (i.e. "cut out any feature that can't be understood in five minutes by a chimp"). Some things do take some effort to learn, but there is a huge payoff for it (it's really powerful!). But yeah, there might be plenty of folks who will never bother learning about them, and they won't understand your code. [Haskell] Newbie: what are the advantages of Haskell?
www.haskell.org/pipermail/haskell/2007-April/01939... I can
quite literally *feel* "brain resources" being freed up when using Haskell,
which I can use to get stuff done quicker (or probably more accurate: I can
feel how much brainpower I waste on book keeping and keeping track of this
"mental log" when using languages like C++)
At a blushing glance, comonads even look dual to monads. I like thinking of monads as computations that get values by adding structure, which means that comonads are computations that destroy the structure to obtain a value.
Gmail - [Haskell-cafe] Is Excel a FP language?
mail.google.com/mail/?fs=1&tf=1&view=cv&search=all... Excel is a zero-order functional
language - a functional language in which you can't define functions. Lisp seems to be optimized for writing code; Python seems to be optimized for reading it. Which you prefer may depend on how often you write new code vs. read unfamiliar code; I'm not entirely sure. What bothers me the most though is not that these two languages do different things, but that the people who argue about it seem to think that there is one “best” answer, and don't see that this is a tradeoff. When I'm writing code I prefer Lisp; when I'm reading code I prefer Python. I think this is an inherent tradeoff—any added flexibility for the writer means an added burden for the reader, and there is no answer that will be right for everyone.
Write Readable Code By Making Its Intentions Clear
haacked.com/archive/2007/04/20/write-readable-code... there are very few people who can read code who cannot write code themselves. It’s not like written or spoken natural languages, where understanding what someone else says does not require understanding why they said it that way.
Gmail - [Haskell-cafe] How Albus Dumbledore would sell Haskell
mail.google.com/mail/?fs=1&tf=1&view=cv&search=all... Formula 1 race car: you can't win the race with a car that doesn't risk breaking down halfway through the race.
Lisp's real advantage remains in its extensibility which can readily be seen as stemming from a core feature of the language; the fact that Lisp programs are expressed as Lisp data structures.
CFS's design is quite radical: it does not use runqueues, it uses a time-ordered rbtree to build a 'timeline' of future task execution, and thus has no 'array switch' artifacts (by which both the vanilla scheduler and RSDL/SD are affected). CFS uses nanosecond granularity accounting and does not rely on any jiffies or other HZ detail. Thus the CFS scheduler has no notion of 'timeslices' and has no heuristics whatsoever. There is only one central tunable, /proc/sys/kernel/sched_granularity_ns, which can be used to tune the scheduler from 'desktop' (low latencies) to 'server' (good batching) workloads." He went on to note, "due to its design, the CFS scheduler is not prone to any of the 'attacks' that exist today against the heuristics of the stock scheduler
Software Development Lessons Learned from Go | Outsight Interactive
www.outsightinteractive.com/blog/software_developm... Professional (9p) Japanese Go player Kajiwara Takeo said in 1986 that
Go is science, art and game. Those chosen few may enter the Eternal Hall of Fame only, who combine the scientific precision, the artistic improvisation and the spiritual joy of the game in themselves.This is just as true of software development: With time and study both skills can be performed well, but both require a unique combination of logic creativity and sincere passion to perform beautifully. Jeff Cunningham: The ridiculous Java bashing needs to stop
www.theserverside.com/news/thread.tss?thread_id=45... Java is not dynamic, and instant feedback in the form of REPL has been available in Lisp since 1956
The Greatest Language Ever and the Greatest Language Possible are both doomed propositions. The former ignores the infinite variation of use cases, platforms, coding styles, and the sociology of individuals and groups. The latter does all of that and goes still further by arbitrarily choosing language features for which the “best” is likely to be a highly debatable matter. Like all good philosophical questions, these one’s don’t have concrete answers. We pose them not to arrive somewhere, but to stimulate thought and further innovation.
Virtual memory was meant to make it easier to program when data was larger than the physical memory, but people have still not caught on.
All sorts of useful things start to happen when the library types and primitives have been banished from your api
I started learning Haskell precisely to solve problems like this. But, once I got into it, I realized that Haskell is a much better modeling language than the modeling language I was using (MOF/UML, the predecessors to EMF). Furthermore, all the infrastructure built on top of that modeling language was very easy to replace with Haskell code. As a result, I gave up that effort.
You said "The benefits of the model+generate approach are well known," however I disagree. W3C DOM, MOF, UML, CORBA, and NetBeans 3.x-4.x are all obvious examples of the failure of the model+generate approach. If the modeling language is sufficiently powerful, then it should be feasible to execute the models directly using a (custom-built) interpreter. If the modeling language is weak then it is better to just do the modeling in Haskell or another more powerful language. The MDA idea was that you would have one model and then be able to use that model in a variety of different programming languages, without having to rewrite code in each target language. Now, people are getting this benefit via a "code, then translate" approach. For example, GWT allows the developer to write Java code, then generate the equivalent Javascript, without any hand-wavy models in between. JRuby lets one write code in Ruby to be used by code in Java; IronPython does the same for other .NET languages. In fact, C# is basically the .NET counterpart to EMF. FWIW, I also think that data based languages like ERD, Relax NG, and XQuery/XPath/XML Schema are a much closer fit to Haskell than EMF. EMF is designed to be translated any object-oriented, class-based, (soley) subtype-polymorphic, single-dispatched, single-inheritance language; i.e. Java. In fact, EMF is really a Java-optimized subset of what was supposed to become part of MOF 2.0. by Brian Smith <brianlsmith@gmail.com> .::t3rmin4t0r::. : observations/migration-patterns-of-codemonkeys.html
t3.dotgnu.info/blog/observations/migration-pattern... ![]() Neil’s point-free blog » Haskell: an Imperative Language with Mutable State
neilbartlett.name/blog/2007/04/11/haskell-an-imper... is Haskell really a pure functional language? In my opinion it is not – it’s much more useful than that. It’s a language that allows imperative programming, but uses its strong type system to keep side-effect-producing code from mixing freely with pure functional code. That makes it uniquely powerful.
Algorithms are good at describing dynamic processes, while scientific formulas or equations are more suited to static phenomena.
Continuation Passing Style (CPS): where every function takes an
extra argument, a function to call with its result
Continuations are similar to goto statements, as both allow arbitrary
control flow. However there are important differences. Continuations
jump to program states, whereas goto statements jump to labelled
positions in code. Goto statements can thus jump into non-sensical
program states where variables haven't been initialised and so forth.
Continuations don't allow this - you can only go back to an already
visited program state. In this way continuations are more controlled
than goto statements.
Intel spills beans on Core 2 successor: SSE4, faster virtualization, bigger caches
arstechnica.com/news.ars/post/20070328-intel-spill... VMware products use a binary translation engine that ingests regular x86 OS code and produces a "safe" subset; VMware claims that this binary translation approach is as fast as, or faster, than VT-based approaches because the OS doesn't have to do costly VM transitions in order to execute privileged instructions.
Technology in plain English » JBoss Workflow JBpm and JBoss Rules (Drools)
www.firstpartners.net/blog/technology/uncategorize...
Technology in plain English » JBoss Workflow JBpm and JBoss Rules (Drools)
www.firstpartners.net/blog/technology/uncategorize...
Random thoughts:
* Always ask for deletion confirmation after checking if the object can be deleted (avoid "are you sure" followed by "cannot delete") * Object evolution in time (versioning): none (simple update, history lost), new object with backreferencing (version tree, forking), new object with forward references * Object evolution methods: new object, diff only * Value Objects as object graph subgraphs (type masks) * Object storage: meta-level (object-attribute-value), table-per-class * Object representation in code: meta-level (Object getAttr(String)), typed attributes * Object storage, representation and versioning are orthogonal * {Model,domain,ontology}-driven interfaces * It's desirable mixing level and meta-level stored information (cold vs. hot spots) * Both free UI navigation and workflow-driven modes should be used where appropriate * Fine-grained pluggable entity sets (kits, packages) (needs weak coupling between entities, external relationship representation (excludes typed attributes (except for AOP mixins))) * Business objects with smart defaults (based on classloading (JMX maybe ?) with off-the-DB default classes) * Remote operation works over snapshots in time of data * Refactoring between level and meta-level (ex: making a class, extracting common attributes) * Draw graph edges first and nodes later so that edges don't clutter node labels * Value Objects as different views (interfaces context) including RO/RW access * Dynamic refactoring between frozen and hot spots
Technology in plain English » What comes after Java and .Net? Agents.
www.firstpartners.net/blog/business/business-proce...
Interface: interactions with software (human-to-computer, computer-to-computer) -> so, an API should be considered "interface" (human-to-{library,framework,...})
Database refactorings:
Shirky: Ontology is Overrated -- Categories, Links, and Tags
www.shirky.com/writings/ontology_overrated.html
A Funny Java Flavoured Look at the World: 10 tips on writing reusable code
hoskinator.blogspot.com/2006/06/10-tips-on-writing...
Abstraction and indirection are very different yet cooperating concepts with two completely different purposes in software development. Abstraction is used to reduce complexity. Indirection is used to reduce coupling or dependence.
Martin Perez's weblog: Top ten ways to create a real J2EE disaster
mpermar.blogspot.com/2006/07/top-ten-ways-to-creat...
"convention over configuration" -> ontology
"configuration over convention" -> folksonomy ? A business process management solution that improves productivity and profitability. Modular, open s
www.fujitsu.com/global/services/software/interstag...
John Reynolds's Blog: Why Use A Database Instead Of ____?
weblogs.java.net/blog/johnreynolds/archive/2006/07... Some people say that any problem can be solved just by adding an other layer of indirections. Problem with that: Information is invariant under indirection. Psychologists have identified a state of mind called flow in which we're capable of incredible concentration and productivity. The importance of flow to programming has been recognized for nearly two decades since it was discussed in the classic book about human factors in programming Peopleware: Productive Projects and Teams by Tom DeMarco and Timothy Lister (Dorset House, 1987). The two key facts about flow are that it takes around 15 minutes to get into a state of flow and that even brief interruptions can break you right out of it, requiring another 15-minute immersion to reenter. DeMarco and Lister, like most subsequent authors, concerned themselves mostly with flow-destroying interruptions such as ringing telephones and inopportune visits from the boss. Less frequently considered but probably just as important to programmers are the interruptions caused by our tools. Languages that require, for instance, a lengthy compilation before you can try your latest code can be just as inimical to flow as a noisy phone or a nosy boss. So, one way to look at Lisp is as a language designed to keep you in a state of flow. One Man Hacking: But Martin, Enterprise Software IS Boring
ravimohan.blogspot.com/2006/07/but-martin-enterpri...
Erlang processes generally communicate with other Erlang processes in a homogeneous environment (note: Erlang processes are not OS-level processes). But each process doesn't know a lot about other processes. There's no reason they all have to be written in the same language. The Universe of Discourse : Design patterns of 1972
newbabe.pobox.com/~mjd/blog/2006/09/11/#design-pat... Patterns are signs of weakness in programming languages. E.W. Dijkstra Archive: On the cruelty of really teaching computing science (EWD 1036)
www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx... The usual way in which we plan today for tomorrow is in yesterday's vocabulary. Many people do not realise that Excel spreadsheets are functional programs. AI - The art and science of making computers do interesting things that are not in their nature. Packrat Parsing: a Practical Linear-Time Algorithm with Backtracking
pdos.csail.mit.edu/~baford/packrat/thesis/ The primary disadvantage of packrat parsing is its storage cost, which is a constant multiple of the total input size rather than being proportional to the nesting depth of the syntactic constructs appearing in the input Peter Scott made the point at OSCON 2006 that an average, one-hundred line Perl program can accomplish about as much work as an average, thousand line C program, yet developers take the thousand line program much more seriously than the hundred line program as it’s ten times the code. Patterns are about what to build, not how to build it. Any system in which two concurrent agents can name the same piece of data must also exhibit the standard problems of concurrency: broken serializability, race conditions, deadlocks, livelocks, lost event notifications, and so on. Concurrency control is simply a requirement if correctness is desired. Dr. Dobb's | Multitasking Alternatives and the Perils of Preemption | September 14, 2006
www.ddj.com/dept/embedded/193000965
Cryptography | The non-denial of the non-self | Economist.com
www.economist.com/science/displayStory.cfm?story_i... Dr Esponda sees great potential for using negative databases when there is a need to look at the intersection of many sets of data owned by different parties. Two or more banks, for example, might wish to work out which transactions they have in common without revealing the whole contents of their databases. Using negative databases to do this would, according to Dr Esponda, provide a robust back-up to traditional cryptography, which relies on codes that can be broken. Its about the progression of a Lisp programmer - the newbie realizes that the difference between code and data is trivial. The expert realizes that all code is data. And the true master realizes that all data is code. Paul’s Pontifications » Blog Archive » Silver Bullets Incoming!
cogito.blogthing.com/2006/12/08/silverbulletsincom...
Paul’s Pontifications » Blog Archive » Silver Bullets Incoming!
cogito.blogthing.com/2006/12/08/silverbulletsincom... Libraries and languages are complicit: they affect each other in important ways. In the long run the language that makes libraries easier to write will accumulate more of them, and hence become more powerful. Paul’s Pontifications » Blog Archive » Silver Bullets Incoming!
cogito.blogthing.com/2006/12/08/silverbulletsincom... Trying to retrofit ideas from one paradigm into a language designed for another is generally a bad idea. Ruby on Rails Development: The Software Complexity Triangle
rubythis.blogspot.com/2006/12/software-complexity-... The points on the Software Complexity Triangle are Simplicity, Power, and Design: The Semantic Web: Everything you wanted to know but were too afraid to ask. - O'Reilly XML Blog
www.oreillynet.com/xml/blog/2006/12/the_semantic_w... it’s like installing a huge relational database on the internet, where anyone can add tables to the database, and anyone can add data to a table. Tables and data can map to one another if you want, like foreign and primary keys Enfranchised Mind » The Functional-Relational Impedance Match
enfranchisedmind.com/blog/archive/2006/06/17/142 To faithfully model SQL we must, on some level, faithfully model the relational calculus. And this is where I think the Object Oriented programmers go astray in trying to interface to SQL. In their hurry to make things into objects, they immediately (and without fail) declare the rows to be objects- and thus miss the fact that relational calculus and thus SQL is about relations, not rows. Enfranchised Mind » The Functional-Relational Impedance Match
enfranchisedmind.com/blog/archive/2006/06/17/142 Another advantage functional programming confers on interacting with a database is immutable data structures- the elements of an instantiated relation/table are immutable, and thus the question of what happens when you change a row of a table is completely avoided, because you can’t change a row of the table except by explicitly inserting them. Good, Fast, Cheap: Pick any two (you can't have all three) Etymon: Interpreter Pattern and Structural Recursion
etymon.blogspot.com/2006/04/interpreter-pattern-an... We solve problems with computers, ultimately we do so with sequences of opcodes passed to the execution unit of our cpus; but the number of concepts we can express in a single sentence in machine code is limited, and the amount of detail we can choose to ignore when it is irrelevant to our solution is minimal. The act of climbing the language stack, (machine code -> symbolic assembly -> macro assembly -> C -> libc -> [java, Scheme, ML, etc]) is an exercise in increasing these two measures The central problem with the von Neumann model is that it’s hard to reason about. The only way to understand a program written to the von Neumann architecture is to execute it. those who do not understand Lisp are doomed to reinvent it (poorly) Haskell, bondage-and-discipline and separation-of-concerns programming « Data.Syntaxfree
syntaxfree.wordpress.com/2007/01/08/haskell-bondag... The perception that monadic IO entails “jumping through hoops” is arguably an artifact of the sheer culture shock between programmers trying to get things done quickly and computer scientists trying to prove formal theories of program calculation. Haskell, bondage-and-discipline and separation-of-concerns programming « Data.Syntaxfree
syntaxfree.wordpress.com/2007/01/08/haskell-bondag... Basically, what lazy evaluation brings to the table is that data-generating functions can be written abstractly, manipulated implicitly and computed only as actual results are requested. Paul’s Pontifications » Blog Archive » Composability and Productivity
cogito.blogthing.com/2007/01/07/composablility-and... So what would a language look like if it got rid of all of these non-composable constructs? The answer, basically, is Haskell. The underlying goal of functional language designers is to make everything completely composable. Haskell is the language that has advanced furthest towards this goal. Ruminations of a Programmer: Why I should learn Lisp
debasishg.blogspot.com/2007/01/why-i-should-learn-... With macros, closures, and run-time typing, Lisp transcends object-oriented programming. "Curried food and curried functions are both acquired tastes"
Good Math, Bad Math : Haskell: the Basics of Type Classes
scienceblogs.com/goodmath/2007/01/haskell_the_basi... Type declarations let us say "the value of this parameter can't be just any value - it must be a value which is a member of this particular type"; type-class declarations let us say "the type parameter for instantiating this function can't be just any type - it must be a type which is a member of this type-class." Good Math, Bad Math : Haskell: the Basics of Type Classes
scienceblogs.com/goodmath/2007/01/haskell_the_basi... Curry-Howard isomorphism, which shows that type systems for lambda calculus are isomorphic to inference systems in some logic. The simply-typed lambda calculus has a type system related to simple propositional logic; Haskell, with its type variables, has a type system derived from first order predicate logic. Ruminations of a Programmer: Syntax Extensibility, Ruby Metaprogramming and Lisp Macros
debasishg.blogspot.com/2007/01/syntax-extensibilit... Abstraction, as they say, is an artifact of the solution domain, which should ultimately bring you closer to the problem domain. Service-oriented architecture - Wikipedia, the free encyclopedia
en.wikipedia.org/wiki/Service-oriented_architectur...
OASIS SOA Reference Model - Wikipedia, the free encyclopedia
en.wikipedia.org/wiki/OASIS_SOA_Reference_Model (SOA) Service: A mechanism to enable access to one or more capabilities, where the access is provided using a prescribed interface and is exercised consistent with constraints and policies as specified by the service description
10 Rules to Code By » Professional Web Software Development
blog.wecreate.com/articles/10-rules-to-code-by/
By being pure (no side effects), by being non-strict, and by structuring computation with monads, Haskell forces you to think differently in order to use it effectively. This is the greatest difference between Haskell and other languages such as, say, Lisp, that allow you to think differently. A closure is a function that captures the bindings of free variables in its lexical context.
Correlation is not the same thing as causation - but it's a darn good hint! The Little Calculist: The call stack is not a history
calculist.blogspot.com/2006/03/call-stack-is-not-h... The evaluation context, i.e. call stack, is not about the history of the program execution. It contains a complete record of the remainder of the program execution, the work the program has left to do. The Little Calculist: The call stack is not a history
calculist.blogspot.com/2006/03/call-stack-is-not-h... stack inspection is fundamentally about inspecting the future of the computation, not about recording its history a language only evolves if its designers and advocates can acknowledge problems Think of a monad as a spacesuite full of nuclear waste in the ocean next to a container of apples. now, you can't put oranges in the space suite or the nucelar waste falls in the ocean, *but* the apples are carried around anyway, and you just take what you need iScreen 1.1.0 released: POJO Validation Framework
www.theserverside.com/news/thread.tss?thread_id=44... Validation is not designed to handle/support real business logic. Validation is a means to ensure that the data an object (or object graph) contains meets certain standards. It makes no judgment upon how that data fits within the overall business model. Business logic (and rules engines) represent decision-making capabilities. Validation engines don't. Too Much Code: Part 2: Languages and the Lesser-Skilled Developer
toomuchcode.blogspot.com/2007/02/part-2-languages-... The idea of programming as a semiskilled task, practiced by people with a few months' training, is dangerous. We wouldn't tolerate plumbers or accountants that poorly educated. We don't have as an aim that architecture (of buildings) and engineering (of bridges and trains) should become more accessible to people with progressively less training. Indeed, one serious problem is that currently, too many software developers are undereducated and undertrained. Too Much Code: Part 2: Languages and the Lesser-Skilled Developer
toomuchcode.blogspot.com/2007/02/part-2-languages-... good design often takes second place to deadlines -- and a language that has the appearance of slowing development won't get far, even if it offers a net gain Making it stick.: Misguided: The Road Not To Be Travelled
patricklogan.blogspot.com/2007/02/misguided-road-n... The interaction between distributed (and therefore concurrent) activities involves two things: data transfer and coordination. Synchronisation to avoid race conditions is just one form of coordination. Systems also need to coordinate activities that don't share data. Message-passing covers all forms of coordination. Making it stick.: Misguided: The Road Not To Be Travelled
patricklogan.blogspot.com/2007/02/misguided-road-n... The major advantage of STM as a system is that it gives you certain guarantees about composability of already working systems. It's not magical, it doesn't always ensure that things will play nicely together, but it does give you far more guarantees about the correctness of compositions than previous systems have. Do message passing, ala MPI or Erlang, at the top level, breaking the problem up into big chunks which can then be distributed over a local network or a highly non-uniform ccNUMA architecture. But then each chunk is solved in a microthread+STM approach, allowing for good utilization of local resources and tightly coupled parallel processes. The only advantage message passing has over STM in the emergent complexity department is that it encourages bigger chunks per thread (due to the relatively high cost of communication)- fewer interacting components means less emergent complexity. But fewer interacting components also means less parallelism, and less performance on future hardware. Wether it’s Erlang and message passing, Haskell and STM, or some hybrid, it looks like the solution is going to be functional programming plus something else. What really drove the adoption of OO programming was GUIs
λ Tony’s blog λ » Blog Archive » Ignorance is mostly bliss, but not always
blog.tmorris.net/ignorance-is-mostly-bliss-but-not... Scala is what I consider a very pragmatic (to steal a buzzword from the hype generators) approach to software development as it exists today. It satisfies the incompetent assertions of the illegitimate authority (aka management) — “you must use Java (et al.)”, while still allowing a reasonably concise expression and programming paradigm e.g. Scala has pattern matching, case classes, variance annotations, higher-order functions and implicit defs (similar to Haskell type-classes). These features alone dramatically reduce the amount of repititious work that you otherwise do in more mainstream languages by one of those crazy orders of magnitude that would never be believed by a mainstream programmer and so could easily be explained away as nonsense with support from other ill-informed peers (those who know what I mean, know what I mean). Amazon.com: Purely Functional Data Structures: Books: Chris Okasaki
www.amazon.com/Purely-Functional-Structures-Chris-... many functional data structures can compactly represent not just their current state, but all of their past states as well--a feature called "Persistence". Notes on Haskell: What's wrong with the For Loop, Revisited
notes-on-haskell.blogspot.com/2007/02/whats-wrong-... Maybe the debate about adding closures to Java isn't really about adding closures to Java. Maybe it's about bringing higher order programming to Java, where the most vocal part of the debate involves complaining about the proposed syntax, or questioning the value making a large language definition even larger.. We know about as much about software quality problems as they knew about the Black Plague in the 1600s. We've seen the victims' agonies and helped burn the corpses. We don't know what causes it; we don't really know if there is only one disease. We just suffer -- and keep pouring our sewage into our water supply. -- Tom Van Vleck
"If you think good architecture is expensive, try bad architecture."
How to write programs in two easy steps « Types, Programming, etc.
edwinb.wordpress.com/2007/02/19/how-to-write-progr... Hypothesis 1: Human interface cognitive load is proportional to the number of clicks/keystrokes/gestures. Hypothesis 2: Human interface cognitive load is inversely proportional to interface latency. Hypothesis 3: The usability of an interface is inversely geometrically proportional to its cognitive load. messaging is something that should be built under an object transport layer, not on top of it. Messaging is a more general idiom than object method invocation. Any sufficiently complicated Lisp or Ruby program contains an ad hoc,
informally-specified, bug-ridden, slow implementation of half of
Haskell.
Any sufficiently complicated Lisp or Ruby program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Haskell. Gmail - [Haskell-cafe] Trouble with record syntax and classes
mail.google.com/mail/?fs=1&tf=1&view=cv&search=all... When you type "class Foo" in Java or C++, it does three things: Gmail - [Haskell-cafe] Trouble with record syntax and classes
mail.google.com/mail/?fs=1&tf=1&view=cv&search=all... You can think of a type as a set of values. For example, Bool is the Yet Another Language Geek : Immutability, Purity, and Referential Transparency
blogs.msdn.com/wesdyer/archive/2007/03/01/immutabi... Make it correct, make it clear, make it concise, make it fast. In that order. A language is strict if it evaluates the arguments to a function before it evaluates the function. A non-strict language doesn’t. Monads in functional programming provide a framework for aspect-aware computations to be composed to build higher-level aspect-aware computations. An aspect-aware computation is some basic computation that has been enhanced, augmented, or, more generally, just transformed, to become aware of some generic concern. The Semantic Web will never work because it depends on businesses working together, on them cooperating. Giles Bowkett: Can Your Rails App Write Itself?
gilesbowkett.blogspot.com/2007/03/can-your-rails-a... The big open secret of software development is that good programmers aren't engineers at all -- we're artists, and artists who aren't living on the edge aren't living at all. Ten Questions with Joe Armstrong about Parallel Programming and Erlang | Thinking Parallel
www.thinkingparallel.com/2007/03/20/ten-questions-...
Notes on a possible Gems-like environment using Haskell:
* Functions shown as components with many input ports and one output port * Editor could interface with GHCi to infer types dinamically during design * Diagram show legend with associated colors to types * Connect suggestions based on types * Multiple connections from the output port can denote "let..in" expressions * Inference of function arguments based on unmatched variable names in the function body * When connecting, re-evaluate types of affected components * Components with "burned" inputs represent lambdas as their outputs * Ask for missing inputs at component runtime (tests during design) * Burns can be inferred according to types when connecting * When ambiguous burning, currying could be suggested, burning arguments starting from the first * Intellicut: auto-completion of connections * Algebraic data types accessor functions using OOP classical dot notation * How to represent recursion and pattern matching ? * Why are code gems separate from regular function gems ? |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||