Hacker News new | ask | show | jobs
by qznc 4585 days ago
I am torn on this. On the one hand, programming is empowering, so everybody should learn some programming in school. On the other hand, a powerful tool is also dangerous. Look at the financial sector using complex Excel sheets nobody understands anymore. As the world gets more and more dependent on software, we need more professionalism in software engineering.
1 comments

Complex ¬= Powerful. Simple is Powerful.

> we need more professionalism in software engineering.

I completely agree. I think we need courses on The Mindset of Coding, teaching things like some of Bret Victor's principles, KISS, the UNIX philosophy, reverse engineering, …

What does "powerful" even mean?

Each time I open an article on HN describing the virtues of the latest programming language, I always see the word "powerful". Whether a language is Assembly or Python, the author can guarantee it's "powerful". I think it's devolved into a buzzword because programmers use it to mean opposite things. It's like how Orwell said two critics can describe the same painting as possessing both "a living quality" and "a peculiar deadliness" [1].

Like I said in another comment, programmers were able to abstract binary away from the tangibility of punch tape. But I think we can only abstract so much before we begin to hit a wall, beyond of which we begin to lose absolutely essential features. So once we reach such a point, I think complexity becomes conserved.

So if we want to simplify one thing, the best we can often do is move the complexity elsewhere. Like a what a refrigerator does with heat. When programmers say a low level language like C is simple and powerful, they mean that the implementation is simple, but the interface is complex [2]. But when programmers say that a high level language like Python is simple and powerful, they mean that the implementation is complex, but the interface is simple.

So I think the real question is, "Where is the complexity hiding?"

[1] https://www.mtholyoke.edu/acad/intrel/orwell46.htm

[2] http://www.jwz.org/doc/worse-is-better.html

Paul Graham has an essay on the subject: http://www.paulgraham.com/power.html
Yes, I'm familiar with Paul Graham's essay. But while the topics we address are related, I think they're distinct in their own right. pg is arguing that succinctness (the "simple interface" camp) should be the goal to which all programming languages aspire. I'm complaining that programmers use the word "powerful" to describe things which are, not only dissimilar, but outright contradictory! pg's essay is prescriptive; my comment is descriptive.

I also think my links are sufficient. Orwell discusses sloppy diction. "Worse is Better" discusses complex implementation. pg's essay primarily addresses interfaces. If expressing myself had been as easy as citing pg's essay, I would have done just that.

I have no way of knowing if you knew about Paul Graham's essay or not; it seemed relevant, so I pointed it out.

I'm afraid I'm not quite up to getting into your comments on C (late on a Friday night, if you'll forgive me that). But regarding Graham's essay, I don't think it's about interfaces. It's about abstractions. If I have powerful abstractions, I can do a lot by saying a little - and that's not because of the interface to these powerful things, but because of the meaning of the thing behind that interface.

> regarding Graham's essay, I don't think it's about interfaces. It's about abstractions.

Hm... I disagree. would argue that the interface determines the level of abstraction. Almost so much that they might as well be referred to as the same thing, in colloquial contexts.

According to Wikipedia [1], "abstraction" is a way of deriving concepts from tangible objects. According to Paul Graham [2], McCarthy had the insight that variables are effectively pointers. To paraphrase a Zen Koan [3], "The wise man looks at the moon, the fool looks at the finger".

What I'm hinting at is, I think of the entire English lexicon in terms of pointers. Words point to a subset of (real or imagined) particulars we encounter in our experiences. Programming is pointing to a task we want to accomplish via instructions. So when pg talks about "succinctness and abstraction", the list of pointers becomes shorter. But the things they point to remain the same. If a lisp source file and an assembly source file accomplish the same task given the same parameters, then it's the pointers which have changed, not what they point to.

The programming interface affects abstraction. Whether it's an IDE, or a notepad document -- perl or punch tape, the interface affects abstraction. Think about the interface as a medium of expression. it shapes not only the length of the code, but also how the programmer attacks the problem space. E.g. suppose you sketched the Eiffel Tower in pen on cloth, and I carved the Eiffel Tower in marble. Both our works point to the same object. They also have their unique nuances because some of the details of the real tower are lost due to the limitations of the medium. To quote pg [4], "You need that resistance [a friend to bounce ideas off of], just as a carver needs the resistance of the wood."

If abstraction (regarding programming) is about how "instructions to perform a task" are conveyed, then implementation is about technique of performing the conveyed task. Our instructions can point to a specific implementation (per low level languages). But I think we agree they're not the same thing since delegating a task is obviously distinct from specifying how to accomplish it. In my previous comments, I linked to an article which described implementation. When it mentioned "implementation", it meant it in the sense of how the CPU handles interrupts.

pg's essay talks about how fast and easy it is to write code, which is derivative of interface. But does he mention how high-level languages like lisp often execute at a snail's pace given our society's current processing power? He does in another essay, but not in the particular essay you cited. In "Succinctness is Power", pg only addresses one half of the "conservation of complexity equation". I admit it could have been helpful. But I accomplished more by citing other links. Therefore, it would have been redundant.

P.S.

Furthermore, pg is advocating for a higher level abstraction. But in my Orwell link, Orwell complains that words are often vague and overgeneralized. I.e. he's arguing for a lower level of abstraction. Therefore, citing pg would have hurt my case. It's not that I'm trying to cherry pick. I recognize that everything has a time and place, including high lvl and low lvl abstraction. But in the case of addressing the meme "all languages are powerful!", "Succinctness is Power" was definitely not the right citation for the job.

[1] http://en.wikipedia.org/wiki/Abstraction

[2] http://www.paulgraham.com/diff.html

[3] http://www.fifth-ape.com/blog/2012/3/27/the-finger-and-the-m...

[4] http://paulgraham.com/ideas.html

This is the most sensible thing I've heard for years.