Ask HN: How to get started with serious programming as a math liker?
I&#x27;m like you. I prefer books.<p>I suggest Python and to a lesser extent Jupyter for now. Julia is better, C is faster, but Python is so ubiquitous that someone has already had your problem and written about it. Lots and lots of scientists (including mathematicians) use Python, and there is a huge ecosystem of tools for it.<p>It matters what you want to make. If it&#x27;s games, then disregard the above and maybe try Godot, but it sounds more like you want to be a swiss-army-knife kind of programmer that uses code to solve problems vs a pro software developer.<p>You should probably roll with Anaconda, despite its flaws. It&#x27;s an OK system for managing your programming environments&#x2F;dependencies without being completely overwhelmed in the first month. Python package&#x2F;dependency management out of the box is ass so unless you enjoy screaming at the command line you should outsource that task.<p>You&#x27;ll need a decent IDE. You might like Spyder which is aimed at Scientists. I like PyCharm (and its cousin DataSpell) from Jetbrains. You&#x27;ll feel a bit overwhelmed at first because there are over 9000 features you don&#x27;t need in the early days, but you do want something that can grow with you. Some people love VScode but they are wrong and also bad. The two IDEs I like are both installable via Anaconda and despite its flaws that&#x27;s the easiest way to get rolling.<p>Get familiar with SciPy, which is a suite of scientifically oriented python librarys including a computer algebra system (SymPy), vectorized computation (NumPy). You will probably find yourself using the latter a lot because Python is slow as mud by default so intense computation requires optimized libraries, usually written in C and given a Python interface.<p>You will need a good Python language reference book. I like O&#x27;Reilly books for most purposes, <i>Learning Python</i> by Mark Lutz is boring and tedious but a good complete reference for the early stages. You can safely ignore all the stuff about Python 2, most of the world has moved on and you probably won&#x27;t have to struggle with trying to convert code from Python 2 to Python 3.<p>Get a book or print out a cheat sheet on the Python standard library. It&#x27;s huge and getting a top level familiarity will save you a lot of time reinventing the wheel - although reinventing the wheel in pure Python is not that hard, doing it well is another thing, so often you&#x27;ll implement something for your own understanding, realize your implementation is not very good, and then have to make a decision between betting better at a very narrow task or going with the much-better-written library that already exists. C programmers will deride you for this because C is the kind of language where you start out with a hammer and use it to make your own nails. (I actually love C but it&#x27;s kind of a desert island language and you will get frustrated if you want to to anything remotely complex&#x2F;user-friendly until you have much more experience).<p>Do you wanna do &#x27;data science&#x27;? Probably, because that&#x27;s the hot word for waving your arms around and making the computer do stuff that isn&#x27;t easy to do in Excel. You&#x27;ll want <i>Python for Data Science</i> by Wes McKinney. This is a bit about Python, a bit more about NumPy, and a whole lot about Pandas, which he invented. Pandas is somewhere between a spreadsheet and a database. It&#x27;s verbose and not fun until it is and then you start opening .xls files in pandas because you can get stuff done faster than you can in Excel. It&#x27;s not hard, but it&#x27;s like its own second language that sits on top of Python at right angles. You need to know it because it&#x27;s so widespread that even more clever replacements aim to be compatible or at least similar to it.<p>If you just wanna make hardcore graphs you might get on great with Matlotlib, which is a Mathematics Plotting Library. It&#x27;s quirky but accessible, also ubiquitous. But it&#x27;s also too quirky ofr a lot of people and has a lot of competitors on the output&#x2F;user interface&#x2F;dashboard side. The big two are Bokeh (gorgeous visuals) and Plotly (slightly less gorgeous, but more extensible).<p>You&#x27;ll want some sort of output library to make pdfs, user interfaces, or web dashboards. Your main choices are Streamlit and Dash. Dash is from the makers of Plotly. It&#x27;s harder than Streamlit but not much, and better.<p>You should get used to doing stuff int he cloud, with stuff like Python Anywhere (part of Anaconda), AWS, or Google Colab. Otherwise you will be like me, running almost everything on your local machine and doing a bad job to pushing it into the outside world, while you instead supervise your own private infinity.<p>Did I say push? You NEED ot learn version control, and the easiest one is probably Git, as in Github. Your IDE will handle most of this for you and you should let it, unless you like screaming the command line. <i>Advanced Python Development</i> by Matthew Wilkes is not the most gripping read but it is good on how to manage your ridiculously large number of tools without completely losing your mind.<p>Remember I mentioned Jupyter? And Swiss Army knives? and remember how you just wanted something to hack around with, instead of mortgaging your cognitive capacity for the next half-decade? Get you a copy of <i>Python Interactive Computing and Visualization Cookbook</i> by Cyrille Rossant which is the best bridge between &#x27;I know some Python and some math and I could probably implement the ideas in this paper I just read&#x27; and Getting Shit Done in science Python. It&#x27;s very accessible and holds your hand well but also assumes you&#x27;re intellectually curious and want a wide breadth of knowledge. I wish I had bought it much earlier, it would have saved me a lot of time running down dead ends.<p>Anyway that ought to be enough to wreck your social life&#x2F;get yourself into moderately serious trouble. Expect to be constantly pissed off for maybe the first 3 months or so, as every new line of inquiry seems to turn up 10 fresh obstacles, partly because you are trying to get familiar with so many different things at once (IDE, language, libraries, program design, problem analysis...). At some point it starts to gel and you can get small tasks done easily enough that researching the next sub-topic becomes empowering rather than overwhelming.