6 ms·
Yeah, people talk about necessary complexity vs unnecessary complexity. "Unnecessary complexity" is all those arcane coding rituals that we do, that our users
by paulhodge 9y ago
Yeah, people talk about necessary complexity vs unnecessary complexity.
"Unnecessary complexity" is all those arcane coding rituals that we do, that our users don't know or care about, but we have to do because our current tools demand it.
We can't get rid of necessary complexity and so we probably can't design a programming interface for someone that is completely illiterate in math & logic.
But what we can do is 1) Eliminate unnecessary complexity, and 2) Provide helpful, structured, interactive, learnable tools, which help guide the author as they do all the "necessary" steps. If we just did that then that would be a huge improvement from the state of the art.
- anewhnaccount2 9y agoHence the name of the Eve blog, http://incidentalcomplexity.com/ http://incidentalcomplexity.com/
- flukus 9y ago> "Unnecessary complexity" is all those arcane coding rituals that we do, that our users don't know or care about, but we have to do because our current tools demand it. What exactly do you mean by this? I can think of many things that fit this description but none that don't have good reasons to exist or remain.
- netheril96 9y agoWebpack config?
- flukus 9y agoCorrect me if I'm wrong because I'm not familiar with it. But isn't that a way to declare dependencies and share the information with other developers? That's something that has a good reason to exist. Replacing that functionality would involve a way more complicated solution to the same problem.
- TeMPOraL 9y agoEveryrhing depends on the scope. Webpack is a complicated tool solving a complex problem, which makes it useful in large projects. But it's also way overcomplicated and unnecessary for small projects. A lot of incidental complexity comes from misapplication of powerful tools to simple problems.
- acemarke 9y agoFWIW, Webpack 4 will have "zero-config" defaults set up out of the box: https://github.com/webpack/webpack/releases/tag/v4.0.0-beta.0 https://github.com/webpack/webpack/releases/tag/v4.0.0-beta....
- beagle3 9y agoIn the 80's, you would turn on your C-64 or ZX-Spectrum or Oric-1 or Dragon-32 or Atari 800, and type: PRINT "This is nice" and it would. Then, you would type: 10 FOR I=1 TO 10 20 PRINT "This works too! Number ",I 30 NEXT I 40 GOTO 10 And it would. Today, you go to your computer and ... open an IDE, define a project, pick your Java environment, select "file new", write some random incantation of "public static void main", accept the suggesting missing imports if you are lucky (if your ide doesn't figure them out, you have to do them yourself), and after a while you actually start running. In the BASIC example, the only "unnecessary detail" are the unreferenced line numbers 20 and 30, which indeed become optional in later basics. In the Java example, everything I described above is incidental. It is not useless in the grand scheme of things of projects with millions of LOC and tens of developers and stuff -- but it is unnecessary for small examples. Java does not scale down. Python mostly scales both up and down, but it still isn't as easy to start writing stuff the way it was in the 80s. The most popular programming environment, by far, is a spreadsheet - it's not imperative or object oriented, but rather functional. and it also fails to scale up or down.
- dukoid 9y agoWould you mind taking a look at https://github.com/stefanhaustein/codechat https://github.com/stefanhaustein/codechat ? WDYT?
- beagle3 9y agoCan't try on an Android right now, did watch the YouTube and looked at the examples. First, it looks awesome. You should do a Show HN sooner than later. Having a few decades of experience under my belt, I'm sure I'm blind to some things newcomers/starters would see, but what I did notice: - Camel case is bad for mobile typing, and bad for non-coders in my experience; underscore is better for the latter but not for mobile typing, so that's not really a solution unless you can add an underscore or some other character (non-minus-dash? center-dot?) that can be pressed directly. - Case sensitivity in general is best avoided in beginner languages, which if adopted might make the above point moot. - I personally find the pairing of "end" and ":" confusing, possibly because of years of "begin/end", "{/}" and "indent: dedent" experience. Most people seem to have a better intuitive grasp of the indent/dedent than any other block scoping, but for mobile I guess ":/end" is acceptable although "{/}" might be better. - What is the distinction between "let" and "variable" ? - The "#number" syntax is not intuitive - I goess it's a replacement for function names or line numbers, for refernece purposes? - One of the conceptual problems that some people have is with the "=" sign for assignment, as it conflicts with its use in mathematics. All overcome it sooner or later, but when I've shown APL ( where assigment of 3 to a is written A <- 3 ) or Pascal ( A := 3 ) to non-programmers, this confusion never comes up. I would recommend keeping = for comparison, and using another symbol for assignments. - Consider adding a variable value display. I've used PythonTutor[1] to teach basic JavaScript and Python non-programmers with great success. A complete value trace is likely beyond the scope of codechat, but a variable display might be very useful. All in all, I think it's awesome. Are you familiar with Atari VCS 2600 BASIC[0]? That's what it reminded me of. [0] http://boston.conman.org/2015/06/16.1 http://boston.conman.org/2015/06/16.1 [1] http://www.pythontutor.com/ http://www.pythontutor.com/
- rtpg 9y agoHere's some really silly examples. They all have reasons, and it makes sense in context, but it's part of the deal. - Java code needs to be in a class. I can't open up a file and start typing immediately - bool(midnight) being false - C header ifdef silliness to make sure you don't double include a header - circular dependency import issues in many languages - strings and bash as the lowest common denominator meaning that almost everything that glues commands together must first write a parser for the output of `ls` - our not putting encoding explicitly into files meaning that there have been decades of people getting weird glyphs when sending files to each other. - implicit str to bytes and back in Py2 causing billions of spurious decode/encode calls. And many more incorrect calls All this stuff is small , and has reasons. But it's also stuff that's been around for decades and decades and cascades into massive weirdness. Death by a bazillion idiosyncrasies.
- pjmlp 9y ago> Java code needs to be in a class. I can't open up a file and start typing immediately Since Java 9 not anymore, thanks jshell.
- TuringTest 9y agoOne finding by the people doing Eve is that common users don't get lexical scopes. If I give something a name, why can't I access it everywhere using that name? Scopes are an artifact of how programming languages have evolved as an abstraction over the runtime stack; that complexity is unnecessary. (Note that this is orthogonal to namespaces - i.e. ways to handle naming conflicts- nor encapsulation -providing a single entry point for changing a variable. Lexical scope was not created to solve either of that).