sheyrena You may find S2 easier, to be honest. I don't, because I don't know the coding language, and lot of S2 is handled through a compiler. I don't even know what language it's coding IN. Me: Programming languages are programming languages. You know one, you know them all. Me: That one is C, for the record.
I answered with a question mark because I don't know or understand programming, but he's given the the impression that assembly is the most basic, and the rest helps to build from there. Or I could just be completely confused.
Assembler (there are MANY VERSIONS of assembler based on processor architecture!) is extremely basic, and speaking at least one of them is very useful, but speaking assembly doesn't actually teach you much about good programming or extend itself well to other languages. All other languages provide you with a structured way to PRODUCE assembler, because assembler is just a way of writing "0111110010100110" as "Move the object in register A into memory location B".
But yeah. While you can technically do anything with Assembler, you can't *PRACTICALLY* to everything with it. And knowing it won't teach you Java in any useful sense.
Oh.. didn't know there was assemblER and assemblY. He learned assembly in computer technologist course at college. And yes, it's not a practical coding language but it's probably useful to understand. I think he's somewhat familiar with VB and C and C+. I'll have to ask him when he gets home from work in a couple hours.
Right. Different ways of achieving the same goal at the basic level, but not inter-compatible. For example, you couldn't utilise one variant if the main code is written in another variant.
At it's heart, Assembler is a 1-to-1 translation of machine code. A series of 1s and 0s becomes an Assembler statement, and vice versa.
What this depends on is the processor itself.
An Intel 8086 processor will interpret "10111010" to be something COMPLETELY DIFFERENT than a Motorola 68K - and that, fundamentally, was the difference between PC and Mac for a good two decades.
And the processors didn't just speak a different language, they had a different valid command list, too. Some things, you simply couldn't DO in a single command on an 8086 processor, so there was no command for them in 8086 assembler. The two addressed memory differently, so a command to store a Word and then read it back would give COMPLETELY different results on different processors.
Assembly was a similar-LOOKING language on different platforms, but fundamentally different. Like Spanish versus French.
Another way to think of it is that learning to work on a Triumph motorcycle will help in some ways when learning how to work on a Briggs & Stratton lawnmower or a Jaguar XJ12, because they have many concepts and one or two parts in common (like spark plugs), but knowing one doesn't mean you already know the others -- they're different machines. Add a Prius hybrid and a diesel Mercedes to the mix, and it gets closer to what you face in assembly-language programming. The ways-of-thinking to understand and troubleshoot the machines and to design repairs and modifications, will be similar, but the shop manual for one won't be much use for any of the others.
BTW, he just got home. He says he used to know Qbasic, and he's more familiar with assembly (as prev mentioned, C++, Java, and VB. In case you were wondering.
nobody said it was a good unlock, but since any language can be converted to an assembly language (in fact, you could probably write a program to read the commands of other programs into an assembly language) it works.
In all fairness, though, you can write a program to convert just about anything, so I might change my vote to Perl.
I found it amusing to discover that, within my RPG geekiness, I'm a Hermetic at heart – my instant response was "Enochian", not Old Realm, the shamanic tounge, Ren, or any other gaming 'true language'
There was not enough room on the poll line for "inherent to the deep brain structure of all programmers", which I knew would be absolutely correct no matter what. Technically, there are some portions of the human experience not addressable by logic, but I believe they are also not addressable by language.
That's creepy. I only made that expressly clear, after months of using this icon, in only one community—just yesterday—of which you are neither a member nor are you watching said community. I was referencing Chomsky and Hofstadter in my text.
I don't grant the premise. Knowing a procedural language doesn't help you understand how a pure-functional language works, for example. Maybe in the extremely basic sense of being comfortable writing code in an editor, and understand What A Computer Does on some reasonable level. And the latter isn't really guaranteed by knowing how to program, to my occasional bafflement
Whereas I say that if you understand C, you can figure out anything. It doesn't make you good or guarantee any quality of output, just guarantee that syntax will not be your problem.
It doesn't have variable assignment, braces-as-blocks, statements separated by semicolons, ordered imperative statements, or really anything else C-like.
C might help you a little bit with data structures, maybe.
This comes closer to my way of thinking than the question as posed does. Knowing C, BASIC, ForTran, Algol, COBOL, Pascal, SPL, csh, dBaseIII, Z80, Macro-11, 6809, and 4th Dimension did not help all that much when it came time to learn Lisp. Knowing programming did, and having been exposed to Algol-family languages helped a smidgen, but compared to learning C after having learned Algol, learning ForTran after having learned BASIC, learning Javascript after having learned C++, or learning VAX Macro after having learned Z80, no other language was particularly helpful in learning Lisp. And knowing math helped as much as knowing procedural idioms for programming, when it came to Lisp. (Come to think of it, old Microsoft BASIC on the TRS-80 helped a little because I was used to nesting stuff algebraically to fit in one-liners, but that's a bit of a reach.) Lisp still didn't take me long, but C wasn't a help. The meta-skill of learning-new-languages was.
I imagine knowing HP pocket calculators will be helpful when I get around to looking at Forth again. I know little about APL except that folks I've spoken to who know it all say, in nearly the same words, that learning it rewires your brain, and that it's pretty alien to other programming languages.
I would've said "one Algol-family language, one ForTran-family language, one assembly language, Lisp, and optionally COBOL" would be the "prepared to learn most other languages quickly enough that other people will think you already knew them" set, and it doesn't matter all that much which Algol-family language and which ForTran-family language you start with (oh, and VAX might not be the best assembler to learn first despite being the most fun -- it's too much like a higher-level language to really teach commonalities of the assembly-language experience ... OTOH, if you're going to program directly in ones and zeroes, VAX is the way to go (speaking as someone who used to program Z80 in hand-assembled hex)). My omission of Smalltalk may merely reflect my own ignorance of it.
Hmm. Let me narrow the choices of Algol-family languages to the ones with OO features: Java, Javascript, C++ ... Though I didn't have much trouble grokking the OO syntax instantly when I learned C++ after already knowing C, getting used to designing in OO terms took a little longer.
The freshman intro-CS course I took at university wasn't a ForTran class; it was a general programming class that happened to use ForTran (the next year, the same class was taught with Pascal). Getting the programming brain-tools (or meta-tools) lined up matters as much as -- probably more than -- having learned any particular "key to unlock other languages" programming language. So that first step could just as well be pseudo-code.
Oh, and I said "prepared to learn most other languages quickly" because I doubt that the set I proposed would help much with Brainfuck and Befunge (though learning Lisp plus an old (say 6502/6809/Z80) assembler would give one a leg up on programming a completely bare-bones Turing machine, so maybe that would help some anyhow...)
I edited my entry ... I clicked on the "Poll #1346583 (http://www.livejournal.com/poll/?id=1346583)" text, then selected "fill out poll" on the page that brought up, and put in my new answer.
(no subject)
Date: 2009-02-10 12:34 am (UTC)(no subject)
Date: 2009-02-10 12:42 am (UTC)But yeah. While you can technically do anything with Assembler, you can't *PRACTICALLY* to everything with it. And knowing it won't teach you Java in any useful sense.
(no subject)
Date: 2009-02-10 12:49 am (UTC)(no subject)
Date: 2009-02-10 12:53 am (UTC)However, if you're programming for an embedded processor, you NEED to know what particular variant you need. And there are a lot of them.
(no subject)
Date: 2009-02-10 01:00 am (UTC)(no subject)
Date: 2009-02-10 01:10 am (UTC)At it's heart, Assembler is a 1-to-1 translation of machine code. A series of 1s and 0s becomes an Assembler statement, and vice versa.
What this depends on is the processor itself.
An Intel 8086 processor will interpret "10111010" to be something COMPLETELY DIFFERENT than a Motorola 68K - and that, fundamentally, was the difference between PC and Mac for a good two decades.
And the processors didn't just speak a different language, they had a different valid command list, too. Some things, you simply couldn't DO in a single command on an 8086 processor, so there was no command for them in 8086 assembler. The two addressed memory differently, so a command to store a Word and then read it back would give COMPLETELY different results on different processors.
Assembly was a similar-LOOKING language on different platforms, but fundamentally different. Like Spanish versus French.
(no subject)
Date: 2009-02-10 02:39 am (UTC)(no subject)
Date: 2009-02-10 09:50 pm (UTC)(no subject)
Date: 2009-02-10 02:57 am (UTC)(no subject)
Date: 2009-02-10 03:17 pm (UTC)In all fairness, though, you can write a program to convert just about anything, so I might change my vote to Perl.
(no subject)
Date: 2009-02-10 12:41 am (UTC)(no subject)
Date: 2009-02-10 12:50 am (UTC)(no subject)
Date: 2009-02-10 12:56 am (UTC)(no subject)
Date: 2009-02-10 01:01 am (UTC)If I wanted to be a smartarse, I could've said Klingon. ;)
(no subject)
Date: 2009-02-10 02:39 am (UTC)(no subject)
Date: 2009-02-10 01:07 am (UTC)(no subject)
Date: 2009-02-10 01:18 am (UTC)(no subject)
Date: 2009-02-10 01:24 am (UTC)(no subject)
Date: 2009-02-10 02:22 am (UTC)That's creepy. I only made that expressly clear, after months of using this icon, in only one community—just yesterday—of which you are neither a member nor are you watching said community. I was referencing Chomsky and Hofstadter in my text.
*giggling*
(no subject)
Date: 2009-02-10 02:32 am (UTC)(no subject)
Date: 2009-02-10 01:20 am (UTC)(no subject)
Date: 2009-02-10 01:30 am (UTC)(no subject)
Date: 2009-02-10 01:34 am (UTC)It doesn't have variable assignment, braces-as-blocks, statements separated by semicolons, ordered imperative statements, or really anything else C-like.
C might help you a little bit with data structures, maybe.
(no subject)
Date: 2009-02-10 01:42 am (UTC)(no subject)
Date: 2009-02-10 02:34 am (UTC)(no subject)
Date: 2009-02-10 09:39 pm (UTC)I imagine knowing HP pocket calculators will be helpful when I get around to looking at Forth again. I know little about APL except that folks I've spoken to who know it all say, in nearly the same words, that learning it rewires your brain, and that it's pretty alien to other programming languages.
I would've said "one Algol-family language, one ForTran-family language, one assembly language, Lisp, and optionally COBOL" would be the "prepared to learn most other languages quickly enough that other people will think you already knew them" set, and it doesn't matter all that much which Algol-family language and which ForTran-family language you start with (oh, and VAX might not be the best assembler to learn first despite being the most fun -- it's too much like a higher-level language to really teach commonalities of the assembly-language experience ... OTOH, if you're going to program directly in ones and zeroes, VAX is the way to go (speaking as someone who used to program Z80 in hand-assembled hex)). My omission of Smalltalk may merely reflect my own ignorance of it.
Hmm. Let me narrow the choices of Algol-family languages to the ones with OO features: Java, Javascript, C++ ... Though I didn't have much trouble grokking the OO syntax instantly when I learned C++ after already knowing C, getting used to designing in OO terms took a little longer.
The freshman intro-CS course I took at university wasn't a ForTran class; it was a general programming class that happened to use ForTran (the next year, the same class was taught with Pascal). Getting the programming brain-tools (or meta-tools) lined up matters as much as -- probably more than -- having learned any particular "key to unlock other languages" programming language. So that first step could just as well be pseudo-code.
(no subject)
Date: 2009-02-10 09:43 pm (UTC)(no subject)
Date: 2009-02-10 02:26 am (UTC)(no subject)
Date: 2009-02-10 03:05 am (UTC)But ANSI C will do for the current question. The original C as specified most popularly by K&R C is a bit -- different.
(no subject)
Date: 2009-02-10 09:54 pm (UTC)