MOST LANGUAGES
EVERYTHING I say in these slides
is fuzzy and opinionated
When people think of..
COMPUTER LANGUAGES.
(though I'll modify this a bit)
What is programming?
Changing your screensaver
Writer/Word
Calc/Excel
HTML/CSS
Bash
PHP/MYSQL/Javascript
Python/Perl/Ruby interpreted/scripted
C compiled
Assembly (00 4E A3 77 8C 0A etc)
On classic "Languages"
A few things 95% of languages have in common:
- this is important to remember:
Written BY humans FOR humans.
Most everything you see isn't some weird computer artifact: it's a choice.
Things people debate about over languages:
- Human readability?
- How do you "run" it?
- Compiled/interpreted/ or scripted?
- "Paradigm?" What's the language's main "style?"
- What was it originally designed to do?
- How does it get changed?
- What does it do now?
Before I descend into more "classic language" stuff
Consider, e.g. Excel, which many would call
the best computer language ever created,
and perhaps a very good balance between
Simple and Easy
MOST LANGUAGES
also, most languages will have exceptions to the below :)
Are general purpose
and/or "Turing complete"
(I will use this term loosely)
MONOSPACE TEXT BASED
- With comments
- And whitespace/formatting is usually NOT important
Are fundamentally IMPERATIVE
and often have a REPL
Have VERBS, NOUNS, (and conditionals)
This may just be me, but
"parts of speech" helps me immensely
VERBS
Commands
Functions
Methods
NOUNS - Deal with DATA
- Most often in some variation of
- Numbers, "words", and "lists (of the last two, or of other lists)
NUMBERS
You already know this when you do 1/3 on a calculator
SO, often Integers v. "Floats/Doubles" etc.
WORDS
Could be numbers or sentences etc.
LISTS
Arrays, (ordinal/associative) Tuples, Dictionaries, etc
Can nest
MIGHT BE:
High or Low level
"Scripts" are probably highest
Recap
Simple like a Command line =
"Unfriendly, but a great deal of power and possibility through simplicity"
Easy like Siri /Alexa =
"Friendly, lots of complexity, but it only lets you do like seven things" ☺
Many of these boil down to: SIMPLE vs EASY
Or, I should probably say, a particular couple of ways to
redefine SIMPLE and EASY.
SIMPLE: (Think "command line")
- Few assumptions
- You can see "everything"
- Usually text-only
- Rigid Framework
- "Mathematical"
- Few abstractions - simple data types.
- Programmer must be MORE verbose,
EASY: (Think "iPhone" or "Siri")
- Many assumptions
- A lot is hidden to simplify the view
- Not always text-only
- Multiple Pre-Loaded Frameworks
- "Visual"
- Many abstractions - simple data types.
- Less language to get something up and running.
MIGHT have a "paradigm"...
Procedural/imperative
Object-oriented
Functional
Declarative
"Important" real life Categories.
(these are fuzzy and non-exclusive)
Procedural/Imperative ("default")
Do things step by step
Important "real life" Categories.
Functional
Turn it into straight up math. No variables, no
"procedures"
Important "real life" Categories.
Object Oriented
Everything uses an "object" metaphor.
("Black Box Approach")..
Important "real life" Categories.
Declarative:
Uncommon, because very hands-off.
You don't say "how" - you just tell what to do over a limited set of possibilities.
(This is HTML and MySQL, and increasingly a lot more things..)
e.g. YAML is used to define things. This is EASY (not SIMPLE)
EXAMPLES
Examples of classic languages
C
Rust
Go
- Low level, Compiled, Native
Examples
Java
Python
(Midrange, Python's honestly probably the best all around, let the fights begin)
Examples
Bash and other SCRIPTING LANGUAGES
Very powerful, and weirdly often not considered
"languages"
Examples
What about MySQL, et al?
Declarative, and not specialized
(why do I hate workbench? :))
..And then the holy mess that is the web.
Here goes: This ONLY makes sense if you remember that the web grew and accreted on itself, and encouraged to do so primarily by "market forces"...
as opposed to "designed."
Text
Plain ol' text. BBS and the like
HTML
"Lets make this look better than the Matrix, SEMANTICALLY"
CSS
"Still kind of ugly, now let's go VISUAL"
Okay but we need interactivity...
OKAY, how about, lets just reach into the computer and run random programs
cgi-bin
This actually worked for a while when we were oh so innocent...
..but honestly, i think we've come full circle.
Server-Side
PHP.
Click a menu and get back some generated HTML. Cool!
Combine with MySQL for even more power!
Client-side
uhoh.
"Okay, so we want things to move around. And maybe more..."
Client-side
We've got this thing people are using to literally make cartoons...
..so I guess we're going to use it for EVERYTHING.
Flash
Javascript
Clearly, we can do better than Flash. I mean, we could slap that together
in a weekend and name it something similar to something that already exists because okay
Javascript part deux
Okay, maybe that wasn't a great idea...
but too bad, here we are.