Fig. X: A proud, hungover, not-Computer-Science major who should not have cut her own bangs but did anyways
In philosophy, genealogy is a historical technique in which one questions the commonly understood emergence of various philosophical and social beliefs by attempting to account for the scope, breadth or totality of discourse, thus extending the possibility of analysis...
Wikipedia, "Genealogy (philosophy)")
The point of a genealogical analysis is to show that a given system of thought was the result of contingent turns of history, not the outcome of rationally inevitable trends.
Stanford Encyclopedia of Philosophy. Michel Foucault: 3.3 From Archaeology to Geneaology
Foucault, Michel (1980). Language, Counter-Memory, Practice: Selected Essays and Interviews. Ithaca, NY: Cornell University Press. p. 139. ISBN 0-8014-9204-1.
Fig. 7 Thomas Kuhn has trippy ideas about how ideas can and do change over time
Scientists work from models acquired through education and literature often without quite knowing or needing to know what characteristics have given these models the status of community paradigms.
Kuhn, Thomas. "The Structure of Scientific Revolutions", pg 46 (1962)
Farooq MS, Khan SA, Ahmad F, Islam S, Abid A (2014) An Evaluation Framework and Comparative Analysis of the Widely Used First Programming Languages. PLoS ONE 9(2): e88941. https://doi.org/10.1371/journal.pone.0088941
Fig. 5: I wish the fools on the internet would realize this.
Fig. 6: If you are using these tools you are way closer to the metal than I am. Maybe you are too close.
A programming paradigm is an approach to programming a computer based on a mathematical theory or a coherent set of principles. Each paradigm supports a set of concepts that makes it the best for a certain kind of problem.
https://www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng108.pdf
More is not better (or worse) than less, just different.
Van Roy, Peter. "Programming Paradigms for Dummies: What Every Programmer Should Know". pg 1
Fig. 8: Peter Van Roy's Paradigm Genealogy
https://www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng108.pdf
The way we are thinking about I/O makes things difficult.
Fig. 9: The font-size on that slide also makes I/O difficult.
Ryan Dahl: Original Node.js presentation (JSConf 2009). JS Conf EU.Published 8 Jun 2012.
Who can wait quietly while the mud settles? Who can remain still until the moment of action?
Haverbeke, Marijn. Eloquent Javascript. https://eloquentjavascript.net/11_async.html
var result = db.query("select * from ?");// use result
Fig. 10: Kitten used thread! Ryan Dahl does not care for this one bit.
Threaded concurrency is a leaky abstraction. It creates pains. You have memory problems. It's hard to think about. It's not a good abstraction for what's happening on your computer.
Ryan Dahl: Original Node.js presentation (JSConf 2009). JS Conf EU.Published 8 Jun 2012.
Fig. 11: There's a lot going on here, but the main takeaway is that both nginx and apache can support a whole bunch of concurrent connections.
https://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/. 18 Dec 2008
Fig. 12: Apache's memory usage grows with concurrent connections in this benchmark with dubious design.
https://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/. 18 Dec 2008
Schmidt, Douglas C. Reactor: An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events. https://www.cse.wustl.edu/~schmidt/PDF/reactor-siemens.pdf
libuv
Callbacks is how I/O should work.
Fig. 14: I heard you like concurrency and obscure music jokes.
Ryan Dahl: Original Node.js presentation (JSConf 2009). JS Conf EU.Published 8 Jun 2012.
JavaScript was designed specifically to be used with an event loop. The culture of JavaScript is already geared towards evented programming.
Ryan Dahl: Original Node.js presentation (JSConf 2009). JS Conf EU.Published 8 Jun 2012.
https://people.mozilla.org/~jorendorff/es6-draft.html. Accessed 12 May 2015.
Fig. 19: THANK U BASED COMPILER!
Baille, Lee. Illustrated Adventure Guide. RustConf 2016. https://www.slideshare.net/LizBaillie/rustconf-2016-illustrated-adventure-guide-65894363
cargo build cargo run cargo doc cargo test
Fig. 16: We call this the "pool table" design. We don't mean it as a compliment.
Turon, Aaron. "Announcing the 2018 Domain Working Groups!". https://internals.rust-lang.org/t/announcing-the-2018-domain-working-groups/6737. 10 February 2018.
async fn serve(addr: SocketAddr) -> io::Result<()> { let socket = TcpListener::bind(&addr)?; println!("Listening on: {}", addr); async for (conn, _) in socket.incoming() { // with Tokio, read and write components are distinct: let (reader, writer) = conn.split(); thread::spawn_task(async { match await copy(reader, writer) { Ok((amt, _, _)) => println!("wrote {} bytes to {}", amt, addr), Err(e) => println!("error on {}: {}", addr, e), }; Ok(()) }); } Ok(())}
Tokio Reform RFC. https://github.com/aturon/tokio-rfcs/blob/tokio-reform/tokio-reform.md
Evans, Julia. "Learning systems programming with Rust". 11 September 2016. https://jvns.ca/blog/2016/09/11/rustconf-keynote/.
Evans, Julia. "Learning systems programming with Rust". 11 September 2016. https://jvns.ca/blog/2016/09/11/rustconf-keynote/.
Evans, Julia. "Learning systems programming with Rust". 11 September 2016. https://jvns.ca/blog/2016/09/11/rustconf-keynote/.
Evans, Julia. "Learning systems programming with Rust". 11 September 2016. https://jvns.ca/blog/2016/09/11/rustconf-keynote/.
The history of every major galactic civilization tends to pass through three distinct and recognizable phases, those of Survival, Inquiry and Sophistication, otherwise known as the How, Why, and Where phases. For instance, the first phase is characterized by the question ‘How can we eat?’, the second by the question ‘Why do we eat?’ and the third by the question, ‘Where shall we have lunch?’
Tao, Terry. "There’s more to mathematics than rigour and proofs". https://terrytao.wordpress.com/career-advice/theres-more-to-mathematics-than-rigour-and-proofs/
Tao, Terry. "There’s more to mathematics than rigour and proofs". https://terrytao.wordpress.com/career-advice/theres-more-to-mathematics-than-rigour-and-proofs/
Herman, Dave. "Stroustrup's Rule and Layering Over Time". https://thefeedbackloop.xyz/stroustrups-rule-and-layering-over-time/. 15 December 2016.
let file = match File::open("file.txt") { Ok(file) => file, Err(err) => { return err; }}
let file = try!(File::open("file.txt"));
let file = File::open("file.txt")?;
I see this a lot in standards and design: as we spend more and more of our time swimming in formalisms like specs, semantics, or implementations, it's easy for us to overlook those "fuzzier intuitions." Just like in mathematics, rigorous tools like specs help us to be precise, but the mechanism of our designs and the developer's mental model they support are two separate things.
Herman, Dave. "The Mechanism is not the Mental Model". https://thefeedbackloop.xyz/the-mechanism-is-not-the-mental-model/. 01 December 2016.
Fitzgerald, Nick. "Oxidizing Source Maps with Rust and WebAssembly". https://hacks.mozilla.org/2018/01/oxidizing-source-maps-with-rust-and-webassembly/ 18 January 2018.
Fitzgerald, Nick. "Oxidizing Source Maps with Rust and WebAssembly". https://hacks.mozilla.org/2018/01/oxidizing-source-maps-with-rust-and-webassembly/ 18 January 2018.
The “Oxidizing” article recounts my experience integrating Rust (compiled to WebAssembly) into the source-map JavaScript library. Although the JavaScript implementation was originally authored in idiomatic JavaScript style, as we profiled and implemented speed improvements, the code became hard to read and maintain. With Rust and its zero-cost abstractions, we found that there was no trade-off between performance and clean code.
Fitzgerald, Nick. "Speed Without Wizardry". http://fitzgeraldnick.com/2018/02/26/speed-without-wizardry.html
Turon, Aaron and Niko Matsakis. "Why wasn't I consulted? How Rust does OSS". Mozilla SF All Hands 2018. https://docs.google.com/presentation/d/1Cz0jGrAfFZVr-31aG586bnSZpCQusRvca93NleTI0l0/
“Why wasn't I consulted” is the fundamental question of the web. It is the rule from which other rules are derived. Humans have a fundamental need to be consulted, engaged, to exercise their knowledge (and thus power), and no other medium that came before has been able to tap into that as effectively.
Ford, Paul. "The Web Is A Customer Service Platform." http://www.ftrain.com/wwic.html
Turon, Aaron and Niko Matsakis. "Why wasn't I consulted? How Rust does OSS". Mozilla SF All Hands 2018. https://docs.google.com/presentation/d/1Cz0jGrAfFZVr-31aG586bnSZpCQusRvca93NleTI0l0/
Lazy Consensus means that when you are convinced that you know what the community would like to see happen you can simply assume that you already have consensus and get on with the work.
Lazy Consensus. https://rave.apache.org/docs/governance/lazyConsensus.html
Turon, Aaron and Niko Matsakis. "Why wasn't I consulted? How Rust does OSS". Mozilla SF All Hands 2018. https://docs.google.com/presentation/d/1Cz0jGrAfFZVr-31aG586bnSZpCQusRvca93NleTI0l0/
Every good work of software starts by scratching a developer's personal itch.
Not gonna cite this one because the dude that wrote this is a big jerk.
Turon, Aaron and Niko Matsakis. "Why wasn't I consulted? How Rust does OSS". Mozilla SF All Hands 2018. https://docs.google.com/presentation/d/1Cz0jGrAfFZVr-31aG586bnSZpCQusRvca93NleTI0l0/
Turon, Aaron and Niko Matsakis. "Why wasn't I consulted? How Rust does OSS". Mozilla SF All Hands 2018. https://docs.google.com/presentation/d/1Cz0jGrAfFZVr-31aG586bnSZpCQusRvca93NleTI0l0/
Turon, Aaron and Niko Matsakis. "Why wasn't I consulted? How Rust does OSS". Mozilla SF All Hands 2018. https://docs.google.com/presentation/d/1Cz0jGrAfFZVr-31aG586bnSZpCQusRvca93NleTI0l0/
Boats, Without. "Not Explicit". https://boats.gitlab.io/blog/post/2017-12-27-things-explicit-is-not/. 27 December 2017.
Many/most people in WG21 are working independently towards non-shared goals. Individually, many (most?) proposals make sense. Together they are insanity to the point of endangering the future of C++.
Stroustrup, Bjarne. "Remember the Vasa!" http://open-std.org/JTC1/SC22/WG21/docs/papers/2018/p0977r0.pdf. 6 March 2018.
https://de.wikipedia.org/wiki/Vasa_(Schiff)
We need a reasonably coherent language that can be used by “ordinary programmers” whose main concern is to ship great applications on time. We now have about 150 cooks; that’s not a good way to get a tasty and balanced meal.
We are on the path to something that could destroy C++. We must get off that path!
Stroustrup, Bjarne. "Remember the Vasa!" http://open-std.org/JTC1/SC22/WG21/docs/papers/2018/p0977r0.pdf. 6 March 2018.
To make Go successful we need everyone's help, and everyone isn't here.
"Keynote: Go, Open Source, Community" Gophercon 2015. https://blog.golang.org/open-source
The major problem caused by the unavailability of feature uniformity is that the size of the language increases, which in turn, results into a longer learning curve.
Farooq MS, Khan SA, Ahmad F, Islam S, Abid A (2014) An Evaluation Framework and Comparative Analysis of the Widely Used First Programming Languages. PLoS ONE 9(2): e88941. https://doi.org/10.1371/journal.pone.0088941
This leads to an increase in the language complexity, in terms of the number and type of constructs. Resultantly, a language without feature uniformity usually demands the instructor to teach a subset of the language. A programmer can use this subset for writing code, but for reading other's code, comprehensive knowledge is required.
Farooq MS, Khan SA, Ahmad F, Islam S, Abid A (2014) An Evaluation Framework and Comparative Analysis of the Widely Used First Programming Languages. PLoS ONE 9(2): e88941. https://doi.org/10.1371/journal.pone.0088941
https://people.mozilla.org/~jorendorff/es6-draft.html. Accessed 12 May 2015.
Williams, Ashley. "If you wish to learn ES6 from scratch you must first invent the universe". https://github.com/ashleygwilliams/jsconf-2015-deck. July 2015.
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |