I'm writing a book about algorithms and Lisp
lisp-univ-etc.blogspot.com
lisp-univ-etc.blogspot.com
- Berkeley: Structure and Interpretation of Computer Programs [Racket version] (http://berkeley-cs61as.github.io/textbook.html)
- Duke: Discrete Math [Racket] (https://www2.cs.duke.edu/courses/spring15/compsci230/syllabu...)
Can anyone recommend other core CS books/courses that uses Lisp (or variants) or other functional languages?
[0] I used to find it impossibly hard to work with trendy frameworks and preferred the mental bliss of hard topics. But at one point you need money and being good enough at making a company work can be a good compromise. As long as it's not too hellish.
Thanks, could you provide some material recommendations?
I'll share one: I've really, really enjoyed 'Graph Theory' by Bondy and Murty (2007 edition): https://www.springer.com/kr/book/9781846289699. Disclaimer: it's much more focused on the mathematical / combinatorial aspects of graphs than on concrete algorithms, although there are some algorithms in there. Some math background recommended.
but right now I'm starting with basics on S. Gill Williamson Foundations of Combinatorics with Application.
I don't mind pure reasoning, but I need practical programming uses to at some point. (maybe joblessness anxiety showing)
I also have some graph books but since it relies on combinatorics rapidly ..
I don't know much in the way of more advanced expository combinatorics books, other than the more narrow Generatingfunctionology (Wilf) and the already mentioned Enumerative Combinatorics (Stanley).
My local university has a book store and the books per course are all there so if I wanted to I could pick up all the books for a CS degree and read um. I could find a list of profs too and I bet if I emailed some I could find one that might talk back.
There's all kinds of ways to go about this :)
Also, I want to be a great software engineer. I've heard arguments that a CS degree doesn't equate to software engineering in a practical sense.
Personally my favorite approach a Bring your own idea approach, where you come up with something you want to build and then figure out how to build it, rather than focusing on what's hot or best or correct. You can stripe down CS and focus only on the product development necessary to achieve a release. Gets you coding, which is a good first step in to CS and a better first step in to the industry (CS != business. Overlaps but ain't the same.)
I'm teaching my girlfriend to code and right now she's on the basics: html, and css. She had no idea what to build so I got her to start working on a dictionary of all the things she's learning (essentially she's taking her notes on html, in html). Very recursive and reinforces the knowledge, but (if they're curious) it would naturally segway into "how do I make it look pretty" (which it did) and we're continuing from there.
Metrics can give you feedback on your level of mastery, but this varies wildly with whoever is providing the feedback.
You can also audit classes for very cheap (or at least it was cheap when i was in school). + I think MIT posts their lectures online for anyone to watch.
The core problem with programming is not the syntax or even the tools, but complexity and abstraction. I.e. programming do not scale well. A 1M LOC program is much different than 100K LOC which is different from 10K LOC, and you need intellectual tools to analyse at different scale.
A non CS programmer usually lack the intellectual tools to analyse problems logically before programming, and jump to code too fast (which is actually encouraged by the "agile" methods, TDD etc).
You'll quickly learn your inclinations as you get into programming, as certain activities will be way feel way more interesting & fun to you. I hate studying things I don't need now, which is a limitation, but that no means does that mean I cannot learn those things.
Back to the BSCS thing. The more competitive a job is, the higher the bar to get that job. High paying dev jobs often have the questionably relevant algo questions. 10 years ago it was questions about pirates with gold coins & moving My. Fuji. In 10 years it might be Alan Turing trivia questions. The only thing you can do to optimize for interviewing is to interview, and it helps to be generally competent in your no niche of choice.
The associated calculus & math you'd learn in school for CS/engineering is also worthwhile to learn.
Just learning your data structures and how to implement them will serve you very well for many/most tasks.
Common Lisp has extremely reasonable and regular syntax if you stick to some basic rules and you don’t “flex” the language gratuitously. Written in such a way, the structure would be familiar to the modern Python or Java programmer. Yet the language is a workhorse when the problems get tough or gnarly.
Looking forward to the publication of this book. Seeing introductory algorithms in modern Common Lisp would be a great resource.
It takes some time to get used to reading s-expressions, but it's not that hard at all.
https://rosettacode.org/wiki/Category:Programming_Tasks
As for books, I liked a lot Niklaus Wirth's "Algorithms + data structures = programs" a couple geological eras back. The book was written with Pascal in mind before the OOP era, but given Pascal's simplicity its examples can be easily translated in other languages. I'd consider more modern books if I knew any; the very few I've briefly skimmed in the past seem either too advanced or too abstract.
TL,DR Just use a language designed for readability, like Python.
That being said C/C++, Python and Go are more fun for implementing pure algorithms/data structures as the language constructs are more designed around that.
If JavaScript was used, the code wouldn't be as straightforward to write and read and you'd have to spend time going through the language's syntax for the reader (or assume the reader knows it already), all getting in the way of just teaching the algorithms themselves.
And yet there is no link to any existing download[sad cat sounds]
That's future tense that you just quoted.
From the first paragraph of the blogpost:
> Now, I'm, finally, at the stage when I can start publishing it. But I intend to do that, first, gradually in this blog and then put the final version — hopefully, improved and polished thanks to the comments of the first readers — on Leanpub.