1713808101

Resources for begginer programmers


If you've never programmed before I suggest you read [Think Python, 2d edition](https://greenteapress.com/wp/think-python-2e/). Its author was kind enough to provide it on his website free of charge. Though you can also buy a physical copy of it if you'd like. There's also a [Java version](https://greenteapress.com/wp/think-java-2e/) available as well though I recommend you choose the Python version. If you've never used a Unix(-like) system before you should read this free book called [The Linux Command Line by William Shotts](https://linuxcommand.org/tlcl.php). It teaches you how to use the Bash shell which is used on all major Unix systems (MacOS, Linux etc.) and as a programmer you will most likely be using the Bash shell a lot so learn it. A shell is a computer program that allows you to interact with your operating system by typing in commands. You don't even even need to have Linux installed to read this book. If you are using MacOS then you already are using Unix so you don't have to install anything else, just open up your Terminal but make sure that you are using Bash (Not sure if you are using Bash? Read [this](https://www.howtogeek.com/444596/how-to-change-the-default-shell-to-bash-in-macos-catalina/).). If you are on Windows you can use [Cygwin](https://www.cygwin.com/). [Reactionary Bash Tutorial](http://www.reactionary.software/learn_bash.html) which was written and linked in the comments by [fschmidt](https://chat-to.dev/profile?u=fschmidt) also seems nice. If your knowledge of mathematics is lacking and/or you've simply forgotten a lot of stuff I suggest you read [Precalculus: Mathematics for Calculus by Lothar Redlin, Saleem Watson and James Stewart](https://www.amazon.co.uk/Precalculus-Mathematics-Calculus-International-Metric/dp/B0BPLVLTZ7/ref=pd_vtp_h_pd_vtp_h_d_sccl_2/257-0938634-3296765?pd_rd_w=SFesp&content-id=amzn1.sym.0024c6b5-da90-4821-b6c0-667e7c129058&pf_rd_p=0024c6b5-da90-4821-b6c0-667e7c129058&pf_rd_r=TPVV4M65T3FQTE0FYY99&pd_rd_wg=2kqaO&pd_rd_r=ca956d11-011a-47ff-abc4-412bb7163894&pd_rd_i=B0BPLVLTZ7&psc=1). Then I suggest you read [Digital Design and Computer Architecture David Harris and Sarah L. Harris](https://pages.hmc.edu/harris/ddca/). There's multiple editions of it available. I suggest you choose the RISC-V version since it's the most recent. This book will teach you how computers really work and since you will be working with computers for a living it makes sense to also learn how they work. The only prerequisite for it is knowledge of high-school mathematics and basics of DC circuits. If your knowledge of DC circuits is lacking check out [this](https://www.khanacademy.org/science/high-school-physics/dc-circuits) free course on Khan academy. Learning assembly language and C programming will also help you with understanding how software and hardware work together. For that I suggest [Learn to Program with Assembly by Jonathan Bartlett](https://www.amazon.com/Learn-Program-Assembly-Foundational-Programmers/dp/1484274369/ref=sr_1_7?crid=2W6O1CS45XT43&dib=eyJ2IjoiMSJ9.zcgXTx2lQOvthW5CvvU7cH0QCiscRF5QeGa14tzlCMUIkEKWCUqQfNVV69NF_v6fAhyvfusvSuYcvNIFjxkJiuq2mCsX5ro6u3HzocljItycVC9jnOV0lBJDHlfVd9pFo3makoHFrGfSRSwyARQ-1SGSyFRlSMmmVNyMToVx93soOEJwK6shkpRL9Tl74ryY8zQeV22fzj-x-1qFyA9mmvrjEiN5zljJqwCYQWD69-D5rNnjfNrqTRstcb62G04KoRZOMEVjNlZU9ytrQGNHVjE6lW7DRLNOfwLfwysRRgQ.KEuesdTyhEPBI_lN0c8pZDVRmLf9LdcW-yf2frm7WXw&dib_tag=se&keywords=assembly+programming&qid=1712480954&sprefix=assembly+programmin%2Caps%2C181&sr=8-7) and [Beginning C: From Beginner to Pro by German Gonzalez-Morris and Ivor Horton](https://www.amazon.com/Beginning-C-Beginner-German-Gonzalez-Morris-ebook/dp/B08DXY5N63/ref=pd_ci_mcx_mh_mcx_views_10?pd_rd_w=wLVpg&content-id=amzn1.sym.8b590b55-908d-4829-9f90-4c8752768e8b%3Aamzn1.symc.40e6a10e-cbc4-4fa5-81e3-4435ff64d03b&pf_rd_p=8b590b55-908d-4829-9f90-4c8752768e8b&pf_rd_r=BZ93GRV771KTRJVBVMRK&pd_rd_wg=vYqUF&pd_rd_r=2c5923dc-1679-4c8d-82cb-9d61c84a9d69&pd_rd_i=B08DXY5N63). Afterwards you should learn about discrete mathematics since this field is used all-throughout the field of computer science. I suggest [Mathematics: A Discrete Introduction by Edward A. Scheinerman](https://www.amazon.com/Mathematics-Discrete-Introduction-Edward-Scheinerman/dp/0840049420/ref=sr_1_22?crid=6IMZ0GYT5WQC&dib=eyJ2IjoiMSJ9.zvdKv5PYAhZj1PgFNhpmLWbKJx9Eu1qBsd1bwx5A99vRmpVM64vzmmxkQkbMPq2aJkRd68K-tyshxojFvY_OPg6iiA_l-4vLnifazyANQrcuiRKHHKzStQIi9TUdfYjg5_RMWcEK2QU48cOQpcv-zKiRVrjXEWzndtrJqeKKmrg.gcjdfWglBzVi5dUpktFJeOROIBiHPu_X9ZkHSa8dMqI). Then you should read [Introduction to Algorithms, fourth edition by by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein](https://www.amazon.com/Introduction-Algorithms-fourth-Thomas-Cormen/dp/026204630X/ref=sr_1_1?crid=W5QL9TWQ62FE&dib=eyJ2IjoiMSJ9.KvIe31QtSpomB0qvECewgj5qlfqmw9eE2-uIyAu06i9gMbY5JvcjCWOGNDRa_AMnA2jhMkm5nr5aFcid2l6T2pQqDYIBFSVCUjk7mTQMikv_n94UxQ4U9E1AtJwZ_jl1yjyQWtg6J_71rjaDwrxQEixHsQ2Nti1D6JXFnYr0jsU75ztMZVBnIV0wIXYilvCaNGHHS6FzSeNoO2esiSFtpFBMgBWuLpvmUHthkxJ_51Q.JjXJZ5v3R7bo6Qjrgzxf5WctalOXCj6KOffnfbldvms). This is arguably the most important book on this list. Without the knowledge of algorithms you are nothing as a programmer so make sure you learn the basics well. Next up on the list is [Computer Networking: A Top-Down Approach by James Kurose and Keith Ross](https://www.amazon.com/Computer-Networking-Top-Down-Approach-7th/dp/0133594149/). As a programmer most of the programs you will be making will interact with the internet some way or another so the knowledge of computer networks is important. [Modern Operating Systems by Andrew Tanenbaum](https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X/ref=sr_1_2?crid=2Z8YO2LU2N50H&dib=eyJ2IjoiMSJ9.bF1gQMplcvL0Kq6MDItySGv0yDTuQHvfJo_eFF8kHvMyBoUjdmBGvXHk--hMPm5PcIS1eIYFVKGGtWujzGzbg0Pg3_FmMWh1kaYxuC-6flyIOhTmrZxWrszblhJ0iZIG3KD1SnMWUfO6s_LqfP7U1rKzvzjDL65Dn957DBcEcU61CASEC5NRWtLwoFC-Vg64-lcEa48X2dDCCK_p8QCf9vKlZwprjhXGAN5Gncws7DE) is also another important read if you want to understand how operating systems work under the hood. It will also help you understand how your computer programs interact with whatever OS you run them on. And finally we come to the topic of programming languages. If you want to know how programming languages work or you even want to make your own one you should read [Introduction To The Theory Of Computation by Sipser](https://www.amazon.com/Introduction-Theory-Computation-Sipser/dp/8131525295/ref=sr_1_1?dib=eyJ2IjoiMSJ9.SbWGml-eaqKf4Xkhh1BHWixAWN40pB5A0JP35NDCNuHpxKcOMhQm3-2UtrAgRQNSB8GXFCHQpwnNcxg4E1e4noq3RnzKjKhnMOF-pDPZC4-tiyCXXbSWOjIbmM2KYjX6rBAluabHiOS7hIPQqRHZcu6CkpKu3cFplP7ZPmI3MIxwH5wDUpoL3hBCGIMB6V_8FIcLfxQ-qr9yOpGJO1ozDEvJ33IZeS3BvuRNutiq_ek.RKkqcXZQ_NatpG0a1V4wvG9k1RlxFyoRtfCgfFh0LDU) Then read [Compilers: Principles, Techniques, and Tools by Alfred Aho, Jeffrey Ullman, Ravi Sethi and Monica Lam](https://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811). And that's all I wanted to say! If you've got any suggestions or questions please let me know!

(10) Comments
amargo85
amargo85
0

i got some great pointers from this post. and i hope to see more of the same [Mr. @someRandomGuy](https://chat-to.dev/profile?u=someRandomGuy)


amargo85
amargo85
0

[@someRandomGuy](https://chat-to.dev/profile?u=someRandomGuy) we're already working on it. We'll have it available soon


someRandomGuy
someRandomGuy
0

Also, to the owner of this website: please add an option to reply to people's comments directly like for example on Reddit. An option to sort comments would also be nice.

amargo85
amargo85
0

[@someRandomGuy](https://chat-to.dev/profile?u=someRandomGuy) we've just added a form for direct replies to comments. we'll add improvements soon but for now I think it's helpful.


someRandomGuy
someRandomGuy
0

Thank you for your reply, fschmidt. I've made a few small adjustments to the Bash section of my post based on your reply. Also may I ask you why do you recommend people to learn the command line before learning their first programming language? Most people in college learn programming before learning the shell without any problems (or programmers in general). Your parses also seems quite interesting. Have you perhaps posted it to [r/compilers](https://old.reddit.com/r/Compilers/)? People there would probably be interested in it.


fschmidt
fschmidt
0

I recommend learning the command line before learning a programming language like Python. The Linux command line is Bash, but Bash is also available on the Mac and Windows, so I recommend not using Linux which is user-unfriendly. Since I couldn't find a decent Bash tutorial, I wrote [my own](http://www.reactionary.software/learn_bash.html) as a part of my general [reactionary programming course](http://www.reactionary.software/learn.html). <br> Python is the best popular programming language for beginners, and the recommended book looks fine. <br> Regarding math, you don't need much for programming. (I was a math major, so I know math well, but I don't use it much.) <br> Regarding programming books, I have [my own list](http://www.reactionary.software/books.html). <br> Regarding programming languages and compilers, I invented [a much better way of making compilers](http://www.luan.software/goodjava.html#parser) but of course modern scum (members of depraved modern culture) reject it, as they reject everything that is good in this world.

someRandomGuy
someRandomGuy
0

Thank you for your reply, fschmidt. I've made a few small adjustments to the Bash section of my post based on your reply. Also may I ask you why do you recommend people to learn the command line before learning their first programming language? Most people in college learn programming before learning the shell without any problems (or just people in general, not only college students). Your parses also seems quite interesting. Have you perhaps posted it to [r/compilers](https://old.reddit.com/r/Compilers/)? People there would probably be interested in it.

fschmidt
fschmidt
0

I explain why to start with Bash [here](http://www.reactionary.software/bash.html). The way most people learn programming is clearly bad because modern programmers suck. <br> Yes I posted about my parser in /r/Compilers [here](https://old.reddit.com/r/Compilers/comments/cv78b3/parsing_for_programmers_who_hate_modern_software/) and the response was typical of moronic modern scum.


JavaJuggler
JavaJuggler
0

My big question is where and when should we use Linux in the development of small websites, why is it necessary in this context?


BarbieDev
BarbieDev
0

wow! well written content! i love it 💖💖 my only question is why many programmers prefer to ignore books and pick up more content from the internet? whenever i talk about books to many people they look as if to say "you still read books!" and this makes me uncomfortable. does it happen to you too?