What do I want from a programming language?
Language attributes |
---|
Performance |
Community |
Learning curve |
Libraries |
Platform |
Paradigm |
Writability |
Technologies |
are on my mind.
Python
has a tremendously low entry level
Traumatic backstory
, though the lack of entry level contributed to me reviewing this in a professional context:
file = open("data.json", 'r') lines = file.readlines() for i in range(len(lines)): "The culprit was trying to change one value in a small json."
I guess I shouldn't shoot Python for being the messenger there.
For posterity
Try
import json with open("data.json", 'r') as datafile: mydict = json.load(datafile)
What is a medium sized problem?
I went to a lecture about Matlab style linear indexing in a language called Q.
The presenter talked about how well written Q's performance was sufficient for what he called medium sized problems.
I guess he meant problems that were not performance critical but did need to finish eventually.
For medium sized problems, read- and write-ability of modestly performant solutions are top goals.
Similarly, a really fast program that gets written too late was not fast enough.
High performance looks weird
For an embarrassingly parallel problem (in which no part of the solution is contingent on another part of the solution finishing first), considerations become like mean distance to memory accesses.
Technologies for especially non-graphics-card high performance become considerations of message passing.
Apache Spark exposing Hadoop in R is high performance in that it is familiar to write, multithreading.
## S4 method for signature 'SparkDataFrame' gapply(x, cols, func, schema)
Aside, hadoop in python
Benchmarks about twice as slow as in hadoop's native java. Piling on the Python-is-slow bandwagon.
Unexpected conclusion
Trying to get to my expected conclusion
Thinking about my physics and mathematics professors, the low level language present really was Fortran for playing with differential equations.
Bringing up Alan Kay
I like to think about Alan Kay's thinking about 1997 - 2022.
He points out that the fanning out of generations of cells in embrionic biology, and the blindingly fast movement-relative-to-size molecule motion of chemistry are not present in computing.
Well other than what I mentioned already we have work on fault-tolerant scatter and gather paradigms,
Cuda GPUs that dispatch novel kernels to other cuda GPUs, the Nvidia docker,
Kubernetes, Kafka,
gcp, aws,
What languages are those?
OpenMPI: | C | C++ | Fortran | |||||||||
Cuda: | Python | C++ | Fortran | |||||||||
Kafka: | Dotnet | Java | Python | Go | C | C++ | ||||||
K8s: | Javascript | Dotnet | Java | Python | Go | |||||||
Spark | R | Scala | Java | Python | ||||||||
gcp/aws/lish: | Shell | terraform |
Lisps
I use elisp for Emacs wizardry. The best programmer I know thinks clojure (a lisp on a JVM) is the future.
Clisp feels like it has something to teach me (I need to put some miles in before getting back into The Art of the Metaobject Protocol).
Scheme is the cool lisp.
Other languages
I do not feel like a javascript programmer. I think scientific javascript was in vogue on the heels of scientific python, since it is an everything and the kitchen sink too language - and it is interpreted by popular web browsers.
The LLVM Handbook was not a thrilling read. I went in wanting some insight into opt passes, and what I got was instructions on writing compilers / using LLVM as part of a toolchain, which I did not especially want.
Schedulers, IDEs, libraries and tools
I love emacs, though I need to check the differences between emacs 27 and xemacs.
Viz IDE, I will start using org-mode for my source as well.
A few internet arguements have mostly convinced me git is more accident than genius (I say, here on github) compared to cvs (can you tell who likes openbsd). What does extensive support for non-head development and merging/rebasing really mean? After that, it's a backup and hosting tool?
Slurm sounds like the name of something I should be using. I need more context to choose this kind of tool. I worked somewhere that fumbled around with Jenkins. Jails and saltstack? For familiarity, I normally bash a short lived gcp compute instance of the nature I want, or use linode.
Pygame was my jump into game development. My game making mentor endorsed godot, and my reading around it suggests that is a good call. C# or its own LLVM fueled similar-to-python.
Gmesh should probably be mentioned somewhere here.