The Anon on the blog said it best: "Erm. This is what scripting languages like Python are for. Until we have reasonable natural language parsers, things aren't going to get much simpler."
Indeed. The way that the conclusion was worded would (if I did not know better) have had me believing that C was a relatively new language rather that the common precursor to most modern languages.
There's a law against that: Leaky Abstractions. As soon as you need to do anything interesting or novel all that complexity smacks you somewhere. Languages just make different tradeoffs as to where they smack you.
It never ceases to amaze me just how often I see sentiments like this expressed. It seems like most people think that programming is a fairly easy activity that could be learned by rote if only we current programmers didn't make it so difficult with all our jargon and complicated tools. Programming should be like painting a fence, right?
Except programming obviously isn't like painting a fence. To stretch the homebuilding analogy a little, programming (even at its simplest!) is more like plumbing or wiring up electricity. It requires a real understanding of what you're trying to achieve and more than a little bit of creativity.
Most people are happy to pay their plumber, electrician, or car mechanic. I really don't understand why so many people think that computer programming isn't in a similar category of "skills you pay people to have". And, of course, I'm probably smart enough to do my own plumbing, or wire up my own electricity, or fix my own car. But I'd rather pay someone who specialises in doing those things to do them for me - if only for my own peace of mind.
A child was on a journey with his father. One day, they happened upon a vast ocean that stood in their way. "Son," the father said, "we will need to change directions, the great water is blocking our path." "Father," the son said, "it's not a problem. I brought a bucket. I'll just scoop the water up and move it behind us."
You can be forgiven for believing that programmers intentionally obfuscate the craft with the intent of protecting their economic turf. However, nothing could be further from the truth. Yours is the belief of an absolute beginner naively lacking any historical context for the craft he is learning.
In truth, the analysis of language is one of the great problems of science. It is one with which the smartest minds, those that have studied math well beyond calculus 2, have struggled and continue to struggle to solve. The ease with which all humans attain the language ability hides the complexities inherent within. However, attempt to teach language to a person beyond the age of eight or so who has never learned to speak, and you will discover that it is literally impossible.
Your call for a simpler programming language is one that has been made by anyone who has ever called themself a programmer. As a matter of fact, the history of programming languages can almost be described as the history of trying to make programming accessible to the masses. (Fortran was programming for non-programmers. C was a non-assembly-language language. Object-oriented programming, as in Objective-C, is an attempt at simplification. Python and other scripting languages, is another step up.)
In this context, you can take your blog post as your first step into "true" programming. (As much respect as I have for those who work with CSS and HTML to make websites work, they are to programming what pamphlets and road signage are to novels and research papers.) It is a perfectly reasonable request, yet one that has proven to be impossible so far.
Alan Turing, one of the fathers of computer science, described what is known as "the Turing Test," which is essentially: the ability of a program/computer/robot to convince a human being (via concersation) that it is also human. Fully passing this is one of the holy grails of computer science.
Please don't be mad at the rest of us for not solving it yet. Kurzweil has a long bet that humanity will finally achieve this by 2029. At least until then, all humans, including yourself, will have to work to be understood by computers.
The guy needs to take a step back and look at the bigger picture and pick-up some fundamental skills before diving into the objective-C "toolbox."
That said, he does have a point about the "shield of complexity". Although I don't think it applies to C, it does very much apply to many of the things we use. In particular, I feel the same way about CSS layout that he feels about C-- far too much complexity for something that should be straightforward and crystal clear.
I'm actually going to agree with him when he says 'This is too hard.' I think he has a point.
Having written apps in VB, C, C#, Java, Mirah, PHP, Ruby and others, most of them make things hard that should be simple. Ruby generally doesn't, though. I've heard the same about Python, but not tried it.
To make a button work in C# or Java, there's a ton of boilerplate code that needs to be written. Since it's boilerplate, why haven't they abstracted that away? (Mirah tries to, but it has some limitations that leave most code still just as verbose.)
I am in a similar situation to the author of this article: learning to program after having having tried and given up ages ago.
I believe the problem lies in trying to learn a complex language from the bottom up.
In the OP's words: "Recently I took on the enormous task of learning Objective-C from the bottom up and I was struck by something I couldn’t shake: this is too hard."
I believe one must consider the top-down approach:
figure out what you want to do accomplish first, paint the solution in broad strokes, then fill in the details.
Hal Abelson touched on this in a recent interview: "there also really are people who like to understand stuff bottom-up. It’s not to my taste. To my taste the most important thing is the idea that you build on abstraction." http://www.codequarterly.com/2011/hal-abelson/.
Get over your discomfort not knowing every detail before the fact, consider what the solution to your task might be and try it.
For a non computer example: you meet a French girl who you want to get to know her better. You could drown yourself in learning the intricacies of French grammar, pronunciation, spelling, etc.. or you could muster your courage and engage in simple dialogue of the 'me- Tarzan you- Jane' type.
Might work and you could fill in the details later.
Right. I also think we need surgery for the rest of us.
I’ll be honest about my education. I studied CS, so the most biology I took was in the last grade at school and I haven't studied any anatomy. but I know to use table knife, scissors and how to wash my hands. How hard can it be to do some minor surgery?
Minor surgery - any surgical procedure that does not involve anesthesia or respiratory assistance during the surgical procedure, - a medical procedure involving an incision with instruments; performed to repair damage or arrest disease in a living body( Ex. Hemorhoids, Tissue neurosis in absces
There are many conditions that can be treated quickly and easily by:
- vaporisation with electrical diathermy (Example: Warts destrucition)
- simple excision (Example: Mole biopsy)
from http://doctorscareclinic.com/html/minor-surgery.html
Seems you have most of the requisite skills to perform minor surgery: lancing a boil with a cauterized needle or tying off a hemorrhoid with a bit of string.
Perhaps you could practice a bit with a needle to get the hang of stitching.
15 comments
[ 3.0 ms ] story [ 51.7 ms ] threadI decided that to make things easier, I'd put more padding on the seat, and ask for people in the stands to give me directions.
Except programming obviously isn't like painting a fence. To stretch the homebuilding analogy a little, programming (even at its simplest!) is more like plumbing or wiring up electricity. It requires a real understanding of what you're trying to achieve and more than a little bit of creativity.
Most people are happy to pay their plumber, electrician, or car mechanic. I really don't understand why so many people think that computer programming isn't in a similar category of "skills you pay people to have". And, of course, I'm probably smart enough to do my own plumbing, or wire up my own electricity, or fix my own car. But I'd rather pay someone who specialises in doing those things to do them for me - if only for my own peace of mind.
A child was on a journey with his father. One day, they happened upon a vast ocean that stood in their way. "Son," the father said, "we will need to change directions, the great water is blocking our path." "Father," the son said, "it's not a problem. I brought a bucket. I'll just scoop the water up and move it behind us."
You can be forgiven for believing that programmers intentionally obfuscate the craft with the intent of protecting their economic turf. However, nothing could be further from the truth. Yours is the belief of an absolute beginner naively lacking any historical context for the craft he is learning.
In truth, the analysis of language is one of the great problems of science. It is one with which the smartest minds, those that have studied math well beyond calculus 2, have struggled and continue to struggle to solve. The ease with which all humans attain the language ability hides the complexities inherent within. However, attempt to teach language to a person beyond the age of eight or so who has never learned to speak, and you will discover that it is literally impossible.
Your call for a simpler programming language is one that has been made by anyone who has ever called themself a programmer. As a matter of fact, the history of programming languages can almost be described as the history of trying to make programming accessible to the masses. (Fortran was programming for non-programmers. C was a non-assembly-language language. Object-oriented programming, as in Objective-C, is an attempt at simplification. Python and other scripting languages, is another step up.)
In this context, you can take your blog post as your first step into "true" programming. (As much respect as I have for those who work with CSS and HTML to make websites work, they are to programming what pamphlets and road signage are to novels and research papers.) It is a perfectly reasonable request, yet one that has proven to be impossible so far.
Alan Turing, one of the fathers of computer science, described what is known as "the Turing Test," which is essentially: the ability of a program/computer/robot to convince a human being (via concersation) that it is also human. Fully passing this is one of the holy grails of computer science.
Please don't be mad at the rest of us for not solving it yet. Kurzweil has a long bet that humanity will finally achieve this by 2029. At least until then, all humans, including yourself, will have to work to be understood by computers.
That said, he does have a point about the "shield of complexity". Although I don't think it applies to C, it does very much apply to many of the things we use. In particular, I feel the same way about CSS layout that he feels about C-- far too much complexity for something that should be straightforward and crystal clear.
Having written apps in VB, C, C#, Java, Mirah, PHP, Ruby and others, most of them make things hard that should be simple. Ruby generally doesn't, though. I've heard the same about Python, but not tried it.
To make a button work in C# or Java, there's a ton of boilerplate code that needs to be written. Since it's boilerplate, why haven't they abstracted that away? (Mirah tries to, but it has some limitations that leave most code still just as verbose.)
I’ll be honest about my education. I studied CS, so the most biology I took was in the last grade at school and I haven't studied any anatomy. but I know to use table knife, scissors and how to wash my hands. How hard can it be to do some minor surgery?