I work as an iOS developer at my day job, but have become concerned that my general CS skills / 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?
Pretty much read anything Knuth if you want to practice math and CS skills. <i>Concrete Mathematics</i> (started as an extended version of the math in Chapter 1 of <i>The Art of Computer Programming</i>) 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.<p>And, while challenging, it can be a pleasure to work through <i>The Art of Computer Programming</i> slowly over a period of time. I did this for both volumes 1 and 2 back in college and just after.<p>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.<p>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).<p>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.<p>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.
If it doesn't have day-to-day application, does it really matter?<p>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.
If you want to work on problems that require mathematical and programming skills, I would suggest <a href="https://projecteuler.net" rel="nofollow">https://projecteuler.net</a>.
A random suggestion from the internet:<p>Read Knuth's <i>The Art of Computer Programming</i>. Some math. All the fundamentals of computer science.