Earlier quoted context omitted.
3 WPM really shook me as well. Today we complain about not having enough time to work on our projects, but back in the good old days, as successful as Dijkstra was, got time to spend 3 WPM and still produced close to 7k articles! Astonishing.
At least as I see my colleagues who buy special keyboards to type code faster and still being hellishly unproductive, deleting and rewriting while I prefer to think before typing and have a solution that works when I type it in instead of iterating over solutions that cannot work in the first place. When I type it's fast, I just don't do it so much compared to my peers, but I am more productive delivering working cod…
Edsger Dijkstra carried computer science on his shoulders (2020)
101–110 of 229 posts
Re: Edsger Dijkstra carried computer science on his shoulders (2020)
#102Earlier quoted context omitted.
don't conflate 'Objects' with 'Object Oriented Design', if you split your data Structures from you algos then your just using an OOP-language to do programming not doing OOP. strong typing has nothing to do with OOP. static variable are replaced by singletons and other similar in spirit objects. OOP today is a 'No true Scotsman' concept much like communism, agile, and other vague by design terms. You can't argue agai…
Aren't you then just attacking a programming style that nobody actually uses or advocates? One of the most influential books about OOP - "Design Patterns: Elements of Reusable Object-Oriented Software" - talks about composition, separating interface from implementation etc - not about hierarchies ( other than to prefer composition ).
Composition has been used since LISP I and ALGOL 60 in almost all programming languages.
"Separating interface from implementation" is also the main feature of the programming languages based on abstract types, starting with Alphard and CLU, which are not OOP languages and which predate the time when Smalltalk has become known to the public, launching the OOP fashion.
An abstract type is defined by an interface, i.e. by a set of functions that have arguments of that type and this is a programming language feature that is completely independent of the OOP features like member functions, virtual functions and inheritance.
All OOP languages have some kind of abstract types, though with a different point of view on the relationships between individual objects and types a.k.a. classes and the functions that operate on them, but there have been many languages with abstract data types without the OOP features.
Moreover "separating interface from implementation" has also been the main feature of all programming languages based on modules, starting with Mesa, Modula and Ada.
The features that identify an OOP language are the idea that the functions belong to individual objects, not to types, hence the member functions, the substitution of the union types (of the right kind, like in Algol 68, not of the pathetic kinds encountered in Pascal and C and derived languages) with virtual functions (to provide an alternative form of dynamic polymorphism, which is preferable for closed-source software, by allowing changes without recompilation, unlike with tagged unions where there are select/case/switch statements that must be recompiled when the union is extended), and the inheritance in a class hierarchy.
There are many languages that are multi-paradigm, like C++ or D, where you can choose whether to write a program in an OOP style or in a totally different style, but there are also languages where it is difficult to avoid using the OOP features, or even impossible, because all the available data types may be derived from some base "object" type, inheriting its properties.
Re: Edsger Dijkstra carried computer science on his shoulders (2020)
#103Earlier quoted context omitted.
whats wrong with object oriented programming?
Most real world problems don’t fit into neatly into hierarchical structures. OOP pushes you towards trying to model everything in the world an objects with strictly defined operations that can be performed on, where those actions are determined by the data type itself. You end up being forced to co-mingle your data structure design, with your data processing design. Which tends to be rather unhelpful. Keeping your da…
And also, can you give me a huge non-OOP codebase that shows in practice how it is better than the potential OOP implementation?
Re: Edsger Dijkstra carried computer science on his shoulders (2020)
#104Earlier quoted context omitted.
Why? Seems completely correct and good. You either have an empty range be -1 .. 0, which is ugly, or 0 .. -1, which is also ugly. Thus, start-inclusive, end-exclusive.
"That is ugly" is what separates math (1-indexing in Fortran, R, SAS, SPSS, Matlab, Mathematica, Julia) from the apes This and column-major order for matrices (a vector is a column, not a row)
We can be thankful that this applied physicist in particular decided to dedicate time to think carefully about the needs of who would be his colleagues and successors, when he was pretty much inventing programming as a profession; he told of the anecdote of when he got married, and he wasn't able to write in "programmer" as his occupation in the Dutch paperwork, because it didn't exist as a job category yet.
Re: Edsger Dijkstra carried computer science on his shoulders (2020)
#105Earlier quoted context omitted.
I'm not sure if it's due to having come across this quote long ago, but this idea is ingrained in my bones. Except I think people have often overly focused on "lines of code" as the unit for this metric, leading many to overrate terse code, even when it is very dense. But I'm not sure what wording would capture this idea succinctly enough to include it in a pithy quote.
There's a benefit to terseness. Go's naming conventions are superior to Java's. APL (and it's many cousins) is a bridge too far for me, but I can see the appeal to having the entire program on a single screen.
In one short letter he makes an insightful critique yet misses the the point so hard I can practically hear the woosh 42 years later.
Re: Edsger Dijkstra carried computer science on his shoulders (2020)
#106Ok, the first thought reading the title was "ah, surely this is about Dijkstras." The immediate second thought that came was the famous quote “I don't know how many of you have ever met Dijkstra, but you probably know that arrogance in computer science is measured in nano-Dijkstras”, from Alan Kay should I believe https://www.goodreads.com/quotes/69528-i-don-t-know-how-many...
We are talking about the person that institutionalized the "we people aren't smart enough to do X" line of thinking from software engineering.
Of course, he was also quick to call a spade a spade, but I haven seeing any case of him denouncing something that wasn't obviously bad.
Re: Edsger Dijkstra carried computer science on his shoulders (2020)
#107Re: Edsger Dijkstra carried computer science on his shoulders (2020)
#108Earlier quoted context omitted.
OP does say mobile phone. But you're wrong according to Wikipedia.. some 5-10 years of overlap depending on what qualifies as smart
OP said smartphone tho
Re: Edsger Dijkstra carried computer science on his shoulders (2020)
#109Dijkstra is a wonderful source of memorable quotes and hot takes from the early days of software. A sampling: > “The competent programmer is fully aware of the limited size of his own skull. He therefore approaches his task with full humility, and avoids clever tricks like the plague.” (Dijkstra, 1972) > “The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.” (Dijkstra…
I will get downvoted for that bur I will ask anyway. So what exactly are his achievements? After reading the article it seems that he mostly produced hot takes, while others did the actual heavy lifing. Goto considered harmful? And some algorithm that would probably be found by someone else? Will Linus get a monument made of pure gold when he dies?
Re: Edsger Dijkstra carried computer science on his shoulders (2020)
#110> "Whether written using a fountain pen or typewriter, Dijkstra’s technical reports were composed at a speed of around three words per minute. “The rest of the time,” he remarked, “is taken up by thinking.”9 For Dijkstra, writing and thinking blended into one activity. When preparing a new EWD, he always sought to produce the final version from the outset." > "He also never purchased a computer. Eventually, in the la…
I spend 90% of my time formulating descriptions of the problem and the desired end state
Hallucinating futures where the state of the world is in a state that I either wanted to be or that somebody’s asking me to build
Once you know your final end state, then you need to evaluate the current state of the things that need to change in order to transition to the final state
Once you have your S’ and S respectively then the rest of the time is choosing between hallucinations based on sub-component likelihood of being able to move from S to S’ within the time window
So the process is to basically trying to derive the transition function and sequencing of creating systems and components that are required, to successfully transition from state S to state S'
So the more granular and precise you can define the systems at S and S' then the easier it is to discover the likelihood pathway for transitional variables and also discover gaps, where systems don't exist, that would be required for S'
Said another way: treat everything - both existing and potential futures- as though they are or within an existing state machine that can be modeled. Your task is to understand the markov process that would result in such a state and then implement the things required to realize it.
The religious call this "Prayer"
Others call it "Manifesting"