5 ms·
"People should be required to learn the basics of programming first. They should start with immutable data objects" Immutable data objects and all the stuff ar
by guard-of-terra 14y ago
"People should be required to learn the basics of programming first. They should start with immutable data objects"
Immutable data objects and all the stuff are not the basics of programming. They never were. Unless you single-handedly redefine the meaning of "programming".
The whole text you just wrote is full with dumb self-praise and deprecation of others; based on worship of principles that were never proven to produce good software, or any software at all. This receiving upvotes makes me sad.
- pcote 14y agoComing off conceited doesn't make him wrong regarding CS curriculum. He believes that people should have strong underpinnings in functional programming principles before learning oop. I think fp plays off required math classes pretty well. Consider function composition which is commonly taught in required pre-calc courses. f(x) = ...... f(g(x)) = ...... I will submit that first-class functions map more directly to function composition than polymorphism does. In turn, this background helps new developers have a stronger understanding of polymorphism and when to use it. Whether or not fp principles were ever "proven to produce good software, or any software at all" is besides the point. What's more important is whether or not fp ideas make for better DEVELOPERS. Maybe they do.
- guard-of-terra 14y agoOkay, but CS is not programming. After all, programming is not CS. And by the way, I don't think anybody should first know anything before learning how to program. Programming is like breathing. Do you need to study anything before you breathe? No you don't! So anybody who argues that you should learn all sorts of not useful things before having the privilege of trying useful things, is a strange person indeed to me.
- ludston 14y agoProgramming is not like breathing.
- guard-of-terra 14y agoWhy?
- ludston 14y agoDoes this really need to be said? One is a semi-automated bodily process necessary for extracting oxygen from the atmosphere, and the other is writing instructions in strictly defined languages to control the resources of computer systems. Other than a contrived emotional connection you might make between the two, they aren't comparable.
- guard-of-terra 14y agoYou assume that you live in a physical world but you live in information world for real. I think you do, and you will increasingly do so as time passes. So, being able to control information flow becomes as important as controlling air flow. Yes, you don't die by being unable to do so for five minutes. You don't live that much either.
- deleted 14y ago[deleted]
- batgaijin 14y agoComputer science: the science behind making computers work. Hacking: getting shit to work in a fast manner/making something faster. These are two orthogonal philosophies that give you very different perspectives, and they are both labeled as "programming." So, how about this: the next time you want to deride someone's opinion because they are misusing a term, why don't you clue the rest of the class into what your definition of the term is?
- tikhonj 14y agoThere's no need to redefine programming. There are essentially two fundamental ways to approach a program: what it does (coming from EE) and what it means (coming from math). If you're coming from the first perspective, than mutation is fundamental. Registers are always changing in value and everybody likes self-modifying assembly. However, if you're coming from the second direction--which is at least as fundamental as the first--the basis of computation does not involve mutation. This is where the lambda calculus comes in. It's the abstraction that underlies most of the mathematically well-behaved languages. And in the lambda calculus, as well as a bunch of its popular variations, there is no mutation. From this second perspective, immutable data is a basic building block of programming. Essentially, all you have are functions that can bind names to arguments and be applied to each other. It's a surprisingly simple and elegant model. There are some other popular models of a computer program like the SKI calculus. However, it's easy to translate between the lambda calculus and SKI calculus, so for the purpose of this discussion they are effectively the same. So from a more mathematical standpoint, functional programming is more fundamental than imperative programming. Redefining the meaning of "programming" is not required!
- guard-of-terra 14y agoProgramming is about writing some code that does useful work. Okay? When you argue that programming is something else, you're doing just that: redefining. Because from the first days programming meant building computational devices or programming programmable devices. And those have changing state, and then they have machine code, which mutates state. It's how it always was and now some people want to redefine it but I say no to them. Programming is not CS. Programming is about producing programs. Historically and statistically programs are written to work by mutating their state.
- prodigal_erik 14y agoTuring machines have mutable state. The lambda calculus does not. Yet any algorithm which can be expressed by one can also be expressed by the other. We have proof that state is merely an implementation detail, which happens to be widespread in today's hardware because we figured out how to implement it at scale. Programmers need to understand the difference between the abstract algorithm they're trying to express and the representation they've chosen (and the ones they didn't) inside the computers they're using, just as astronomers need to distinguish between the stars they study and the measurements coming out of the various telescopes they can choose.
- nessus42 14y ago>Immutable data objects and all the stuff are not the basics of programming. They never were. Unless you single-handedly redefine the meaning of "programming". Immutability was considered to be more fundamental when I took my first programming course at MIT. I received a very good education. We, of course, eventually moved onto objects with mutable, but they were definitely considered to be more dangerous and less fundamental.
- guard-of-terra 14y agoIt means the course wasn't about programming. Maybe it was misnamed or maybe you approximate its real title. Me, not really interested in what people who never wrote any widely used software consider more what and less what. Programming is what happens (and always happened) on top of computing devices that have, you know, memory, registers and opcodes. It's just the hard truth. That's what programming is. Writing code that compiles (interprets) as machine code for said computing devices. All other kinds of stuff - not programming. Call it CS, call it whatever.
- nessus42 14y ago>It means the course wasn't about programming. Maybe it was misnamed or maybe you approximate its real title. Oops, my mistake. I took you for a serious poster, not a troll. The class I took at MIT (SICP) and the textbook that was used are world-famous, and it was certainly a programming class. As to having "never written any widely used software": Among other things, I wrote the software that was used to configure a NASA space telescope (Rossi X-ray Timing Explorer), from which about 1,000 peer-reviewed astronomy papers were published. I've worked on brain surgery software (3D Slicer) and now I work on software used for doing RNA Interference-based cancer research. But I guess you've made your point: All that is just "Computer Science" noodling, not real programming. So, sure don't listen to what I say.
- icarus127 14y ago"Me, not really interested in what people who never wrote any widely used software consider more what and less what." This argument is getting really really really old. Anyone with 5 minutes and a working internet connection can find hundreds of successful widely used applications written with a focus on immutability, either at the language level or the design level.