
Ask HN: How to keep on top of CS and maths? - ceeK
I work as an iOS developer at my day job, but have become concerned that my general CS skills &#x2F; maths are getting worse due to the lack of day to day applications. I mostly work on UI and networking.<p>Are there any good books, problem sets, or fundamental habits that I could use?
======
Jtsummers
Pretty much read anything Knuth if you want to practice math and CS skills.
_Concrete Mathematics_ (started as an extended version of the math in Chapter
1 of _The Art of Computer Programming_ ) is a fantastic introduction to the
more interesting elements of discrete mathematics, and (for me) helped to
solidify calculus concepts by seeing the same things applied to discrete
functions/sequences.

And, while challenging, it can be a pleasure to work through _The Art of
Computer Programming_ slowly over a period of time. I did this for both
volumes 1 and 2 back in college and just after.

For pleasure reading on math, Martin Gardner is a great source of material.
Particularly the collections of his Scientific American articles (there was
work to reprint some of these book collections with Knuth and others editing,
but I think it stalled out after 4 or 5 of them). Spend time on the articles
to really understand the proofs involved and it can, IMHO, improve your
ability to think mathematically.

Otherwise, perhaps as itamarst suggests, find some problem domain which
exercises both CS and math and interests you. Write code to implement the
mathematical algorithms (which will aid your understanding of them), and then
spend time improving the code (practicing your CS skills).

I also doodle math and CS theory problems when I'm bored. Make a state machine
that recognizes, in base 2, all multiples of 3, 4, 5, etc. What pattern exists
in their structure? Why does the symmetry exist in some of them? What happens
when you change the base to 3, 4, ...? Try to apply the concept of generating
functions to get to the closed form solution of the Fibonacci sequence.
Practicing like this, even if it's problems I know by heart at this point,
helps keep the fundamentals that let me solve them the first time fresher in
my mind.

I also recommend reviewing the writings of E. W. Dijkstra. A lot of math, CS,
and software engineering is covered in there. It's also interesting to read as
you'll see a slice of history as the collected papers span about 40 years.

~~~
hackermailman
A lot of Dijkstra makes it into TAoCP books too, and Knuth will cite any
Dijkstra papers relevant to a chapter.

~~~
Jtsummers
That is a good point. I just enjoyed Dijkstra's writing style (clear,
opinionated, and concise). He has great skill as an author. I think there's
great value in reading _his_ writing just to get exposure to his level of
technical communication. Also, it'll make you want to work on your penmanship.

That's another point for Knuth, as well. There are many great thinkers, and
there are many great communicators. It is wonderful to find the intersection
between the two and within CS and math (more CS) the two of them are fantastic
examples of that combination.

------
itamarst
If it doesn't have day-to-day application, does it really matter?

I spent 20 years without using linear algebra. Now I'm doing a bunch of image
processing algorithms and it's suddenly relevant... and it's mostly coming
back. And for the new stuff I'm learning I got a book which I occasionally
read at work.

~~~
arvinsim
I guess that applies for those who got a degree. But would be more interested
on how a self taught developer would go about it.

------
happy-go-lucky
If you want to work on problems that require mathematical and programming
skills, I would suggest [https://projecteuler.net](https://projecteuler.net).

------
brudgers
A random suggestion from the internet:

Read Knuth's _The Art of Computer Programming_. Some math. All the
fundamentals of computer science.

