The 9 Best Programming Books to Read Right Now if You Want to Distinguish Yourself

If you read just one of these best programming books this year you’ll be a step ahead of nearly everyone around you. That’s because, according to Steve McConnell, the author of Code Compete, one book is more than most programmers read each year.

Back in 2008 author, blogger, software engineer and creator of Trello made this bold statement:

Programmers seem to have stopped reading books. The market for books on programming topics is minuscule compared to the number of working programmers. Instead, they happily program away, using trial-and-error. When they can’t figure something out, they type a question into Google.


Does this sound like you?

While search engines and community forums like Stack Overflow are indispensable, there’s no way you can obtain the same depth of knowledge and perspective as you get from reading books.

The best types of programming books are ones that don’t just tell you how, but explain the why behind it. They don’t just teach you about specific languages or how to code, but how to think. They stand the test of time and will help you become a better programmer, whether you are just starting out or have been in the industry for 30 years.

Without further ado, here is the list of the top 8 best programming books to read if you want to set yourself apart and become a coding powerhouse.


1. Coders at Work: Reflections on the Craft of Programming


If you’re curious about life as a programmer than Coders at Work is the book for you. It’s packed with interesting interviews from 15 accomplished programmers and computer scientists including Joshua Bloch, Peter Norvig, Donald Knuth, Ken Thomson, and Jamie Zawinski. The author, Peter Seibel (a programmer turned writer), got interviewees to open up about the famous projects that they worked on and the inspiring stories behind them. Coders at Work gives a peek into what makes some of the greatest programmers tick and how they think. Definitely a must read!


2. Code Complete: A Practical Handbook of Software Construction


Steve McConnell’s Code Complete is considered to be the encyclopedia of practical coding and a must-read for any professional programmer. And, it’s easy to understand why – it’s a massive piece of literature at 900-pages, but each chapter is packed with suggestions and techniques to improve everyday programming and construct code that is readable and easier to manage. McConnell has a knack for presenting his material in a story format that makes the book easy to read and even entertaining. No matter what level you’re at, Code Compete will undoubtedly change the way you think about and write code.

TIP: If you don’t have time to read the book in its entirety, flip to the last three chapters since it serves as a resource guide. From there, you can read through whichever chapters you want information on. Skip the Kindle edition and opt for the print copy since chapters are easier to reference.


3. The Mythical Man Month


The premise of this book is built on the fact that computers change, but people don’t. The Mythical Man Month is a programming classic that discusses the human elements of software engineering. Even though the book was written 30 years ago (first published in 1975) it’s stood the test of time. Why? Because building things, including software, has been as much about people as much as hit has been about materials or technology. If you’re aspiring to become a project manager, this book will help you understand things that can go wrong in software development and will give you practical advice or working with, organizing and managing teams.


4. Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability


If you’re going to read a book on usability make it this one! Don’t Make Me Think is a great resource for any web developer who want to create websites, mobile sites or mobile apps that are much easier to use. The book is loaded with helpful information that’s presented in a clear and concise way that could be understood by both technical and non-technical audiences alike.


5. The Pragmatic Programmer: From Journeyman to Master


Another oldie, but goody, that continues to stand the test of time. The Pragmatic Programmer is a collection of lessons and recommendations for software developers. The book contains a set of numbered tips, about 70 of them, which are collected on a single tear-out card situated in the back of the book. The tips alone might seem obvious, but they contain some surprising dimensions that will help strengthen your programming career and hone your craft! 


6. Clean Code: A Handbook of Agile Software Craftsmanship


Poorly written code can bring a project to its knees, which is why developing great code is so important! In Clean Code, “Uncle Bob” Martin shares tips and examples on how to create better code. The book dives into the principles and best practices of writing clean code, and also presents increasingly challenging case studies presented that challenges readers to think about what’s right with the code, and what’s wrong with it. While examples in Clean Code are given in Java, but is applicable to nearly all programming languages.

TIP: Read Clean Code after getting through Code Complete since it deals with some of the same topics but at a higher level.


7. Programming Pearls


This is a classic book for newbies that teaches the basics of solving problems. If you work through the problems on your own (without looking ahead) you’ll learn a lot and be a much stronger programmer with a deeper understanding of algorithms and algorithm design.


8. Cracking the Coding Interview: 150 Programming Questions and Solutions


This is one of the go-to books for programming interviews if you’re looking to land a gig at a top company such as Amazon, Apple, Facebook, Google or Microsoft. As the title suggests, the book contains 150 programming questions that you might encounter at interviews, and then breaks down how to solve them. The remainder of the book focuses on non-coding aspects of the interview process such as interview prep, resume prep, behavioral prep, etc. Definitely one of the best programming interview books out there. Another good prep book is Introduction to Algorithms , which is considered to be the “bible of algorithms.”  


9. Soft Skills: The Software Developer’s Life Manual


For most software developers, coding is the fun part. The hard parts involve dealing with clients, peers, and managers, staying productive, achieving financial security and so on. This book covers everything-else-apart-from-coding ranging from career, to personal branding, blogging, learning, teaching, finances, and even fitness and relationships.


Bonus Book: Zero Bugs and Program Faster


The author of Zero Bugs spent two years researching every bug avoidance technique she could find. This book contains the best of them! It includes useful tips and techniques, and presents information in an easy-to-digest way and brought to life with stories and metaphors that make it a really enjoyable (and memorable) read.


Have any other “must read” books that you would add to the list? Share!

Ted Talks for when you want to laugh and think

Playlist (8 talks): Talks for when you want to laugh and think

These hilarious talks won’t just make you laugh out loud — they’ll make you think twice.

  • Did you know that you’re 30 times more likely to laugh if you’re with somebody else than if you’re alone? Cognitive neuroscientist Sophie Scott shares this and other surprising facts about laughter in this fast-paced, action-packed and, yes, hilarious dash through the science of cracking up.

  • You have no idea where camels really come from

     Latif Nasser

    Camels are so well adapted to the desert that it’s hard to imagine them living anywhere else. But what if we have them pegged all wrong? What if those big humps, feet and eyes were evolved for a different climate and a different time? In this talk, join Radiolab’s Latif Nasser as he tells the surprising story of how a very tiny, very strange fossil upended the way he sees camels, and the world. This talk comes from the PBS special “TED Talks: Science & Wonder.”

  • My road trip through the whitest towns in America

    Rich Benjamin

    As America becomes more and more multicultural, Rich Benjamin noticed a phenomenon: Some communities were actually getting less diverse. So he got out a map, found the whitest towns in the USA — and moved in. In this funny, honest, human talk, he shares what he learned as a black man in Whitopia.

  • One woman, five characters, and a sex lesson from the future

     In this performance, Sarah Jones brings you to the front row of a classroom in the future, as a teacher plugs in different personas from the year 2016 to show their varied perspectives on sex work. As she changes props, Jones embodies an elderly homemaker, a “sex work studies” major, an escort, a nun-turned-prostitute and a guy at a strip club for his bachelor party. It’s an intriguing look at a taboo topic, that flips cultural norms around sex inside out.

  • Why city flags may be the worst-designed thing you’ve never noticed

    Roman Mars

    Roman Mars is obsessed with flags — and after you watch this talk, you might be, too. These ubiquitous symbols of civic pride are often designed, well, pretty terribly. But they don’t have to be. In this surprising and hilarious talk about vexillology — the study of flags — Mars reveals the five basic principles of flag design and shows why he believes they can be applied to just about anything.

  • Why I keep speaking up, even when people mock my accent

    Safwat Saleem

    Artist Safwat Saleem grew up with a stutter — but as an independent animator, he decided to do his own voiceovers to give life to his characters. When YouTube commenters started mocking his Pakistani accent, it crushed him, and his voice began to leave his work. Hear how this TED Fellow reclaimed his voice and confidence in this charming, thoughtful talk.

  • Math is forever

    Eduardo Sáenz de Cabezón

    With humor and charm, mathematician Eduardo Sáenz de Cabezón answers a question that’s wracked the brains of bored students the world over: What is math for? He shows the beauty of math as the backbone of science — and shows that theorems, not diamonds, are forever. In Spanish, with English subtitles.

  • A science award that makes you laugh, then think

    Marc Abrahams

    As founder of the Ig Nobel awards, Marc Abrahams explores the world’s most improbable research. In this thought-provoking (and occasionally side-splitting) talk, he tells stories of truly weird science — and makes the case that silliness is critical to boosting public interest in science.

🎓 Path to a free self-taught education in Computer Science!



The OSSU curriculum is a complete education in computer science using online materials. It’s not merely for career training or professional development. It’s for those who want a proper, well-rounded grounding in concepts fundamental to all computing disciplines, and for those who have the discipline, will, and (most importantly!) good habits to obtain this education largely on their own, but with support from a worldwide community of fellow learners.

It is designed according to the degree requirements of undergraduate computer science majors, minus general education (non-CS) requirements, as it is assumed most of the people following this curriculum are already educated outside the field of CS. The courses themselves are among the very best in the world, often coming from Harvard, Princeton, MIT, etc., but specifically chosen to meet the following criteria.

Courses must:

  • Be open for enrollment
  • Run regularly (ideally in self-paced format, otherwise running at least once a month or so)
  • Fulfill the academic requirements of OSSU
  • Fit neatly into the progression of the curriculum with respect to topics and difficulty level
  • Be of generally high quality in teaching materials and pedagogical principles

When no course meets the above criteria, the coursework is supplemented with a book. When there are courses or books that don’t fit into the curriculum but are otherwise of high quality, they belong in extras/courses or extras/readings.

Organization. The curriculum is designed as follows:

  • Intro CS: for students to try out CS and see if it’s right for them
  • Core CS: corresponds roughly to the first three years of a computer science curriculum, taking classes that all majors would be required to take
  • Advanced CS: corresponds roughly to the final year of a computer science curriculum, taking electives according to the student’s interests
  • Final Project: a project for students to validate, consolidate, and display their knowledge, to be evaluated by their peers worldwide
  • Pro CS: graduate-level specializations students can elect to take after completing the above curriculum if they want to maximize their chances of getting a good job

Duration. It is possible to finish Core CS within about 2 years if you plan carefully and devote roughly 18-22 hours/week to your studies. Courses in Core CS should be taken linearly if possible, but since a perfectly linear progression is rarely possible, each class’s prerequisites is specified so that you can design a logical but non-linear progression based on the class schedules and your own life plans.

Cost. All or nearly all course material prior to Pro CS is available for free, however some courses may charge money for assignments/tests/projects to be graded. Note that Coursera offers financial aid. Decide how much or how little to spend based on your own time and budget; just remember that you can’t purchase success!

Content policy. If you plan on showing off some of your coursework publicly, you must share only files that you are allowed to. Do NOT disrespect the code of conduct that you signed in the beginning of each course!

How to contribute. Please see CONTRIBUTING.

Getting help. Please check our Frequently Asked Questions, and if you cannot find the answer, file an issue or talk to our friendly community!


Curriculum version8.0.0 (see CHANGELOG)


  • Core CS assumes the student has already taken high school math and physics, including algebra, geometry, and pre-calculus. Some high school graduates will have already taken AP Calculus, but this is usually only about 3/4 of a college calculus class, so the calculus courses in the curriculum are still recommended.
  • Advanced CS assumes the student has already taken the entirety of Core CS and is knowledgeable enough now to decide which electives to take.
  • Note that Advanced systems assumes the student has taken a basic physics course (e.g. AP Physics in high school).

Introduction to Computer Science

These courses will introduce you to the world of computer science. Both are required, but feel free to skip straight to the second course when CS50 (the first course) moves away from C. (Why?)

Topics coveredimperative programming procedural programming C manual memory management basic data structures and algorithms Python SQL basic HTML, CSS, JavaScript and more

Courses Duration Effort Prerequisites
Introduction to Computer Science – CS50 (alt) 12 weeks 10-20 hours/week none
Introduction to Computer Science and Programming using Python 9 weeks 15 hours/week high school algebra

Core CS

All coursework under Core CS is required, unless otherwise indicated.

Core programming

Topics coveredfunctional programming design for testing program requirements common design patterns unit testing object-oriented design Java static typing dynamic typing ML-family languages (via Standard ML) Lisp-family languages (via Racket) Ruby and more

Courses Duration Effort Prerequisites
How to Code – Simple Data 7 weeks 8-10 hours/week none
How to Code – Complex Data 6 weeks 8-10 hours/week How to Code: Simple Data
Software Construction – Data Abstraction 6 weeks 8-10 hours/week How to Code – Complex Data
Software Construction – Object-Oriented Design 6 weeks 8-10 hours/week Software Construction – Data Abstraction
Programming Languages, Part A 4 weeks 8-16 hours/week recommended: Java, C
Programming Languages, Part B 3 weeks 8-16 hours/week Programming Languages, Part A
Programming Languages, Part C 3 weeks 8-16 hours/week Programming Languages, Part B


Core math

Topics coveredlinear transformations matrices vectors mathematical proofs number theory differential calculusintegral calculus sequences and series discrete mathematics basic statistics O-notation graph theory vector calculus discrete probability and more

Courses Duration Effort Prerequisites
Essence of Linear Algebra pre-calculus
Linear Algebra – Foundations to Frontiers (alt) 15 weeks 8 hours/week Essence of Linear Algebra
Calculus One1 (alt) 16 weeks 8-10 hours/week pre-calculus
Calculus Two: Sequences and Series 7 weeks 9-10 hours/week Calculus One
Mathematics for Computer Science 13 weeks 5 hours/week single variable calculus (Calculus Two)

1 Note: When you are enrolled, please see this list of errors and these recommendations for how to progress through the course.

Core systems

Topics coveredboolean algebra gate logic memory machine language computer architecture assembly machine language virtual machines high-level languages compilers operating systems network protocols and more

Courses Duration Effort Prerequisites
Build a Modern Computer from First Principles: From Nand to Tetris (alt) 6 weeks 7-13 hours/week none
Build a Modern Computer from First Principles: Nand to Tetris Part II 6 weeks 12-18 hours/week From Nand to Tetris Part I
Introduction to Computer Networking 8 weeks 4–12 hours/week algebra, probability, basic CS – Hack the Kernel 15 weeks 6 hours/week algorithms


Core theory

Topics covereddivide and conquer sorting and searching randomized algorithms graph search shortest paths data structures greedy algorithms minimum spanning trees dynamic programming NP-completeness and more

Courses Duration Effort Prerequisites
Algorithms: Design and Analysis, Part I 8 weeks 4-8 hours/week any programming language, Mathematics for Computer Science
Algorithms: Design and Analysis, Part II 8 weeks 4-8 hours/week Part I

Core applications

Topics coveredAgile methodology REST software specifications refactoring relational databases transaction processing data modeling neural networks supervised learning unsupervised learning OpenGL raytracing block ciphers authentication public key encryption and more

Courses Duration Effort Prerequisites
Databases 12 weeks 8-12 hours/week some programming, basic CS
Machine Learning 11 weeks 4-6 hours/week linear algebra
Computer Graphics 6 weeks 12 hours/week C++ or Java, linear algebra
Cryptography I 6 weeks 5-7 hours/week linear algebra, probability
Software Engineering: Introduction 6 weeks 8-10 hours/week Software Construction – Object-Oriented Design
Software Development Capstone Project 6-7 weeks 8-10 hours/week Software Engineering: Introduction

Advanced CS

After completing every required course in Core CS, students should choose a subset of courses from Advanced CS based on interest. Not every course from a subcategory needs to be taken. But students should take every course that is relevant to the field they intend to go into.

The Advanced CS study should then end with one of the Specializations under Advanced applications. A Specialization’s Capstone, if taken, may act as the Final project, if permitted by the Honor Code of the course. If not, or if a student chooses not to take the Capstone, then a separate Final project will need to be done to complete this curriculum.

Advanced programming

Topics covereddebugging theory and practice goal-oriented programming GPU programming CUDA parallel computingobject-oriented analysis and design UML large-scale software architecture and design and more

Courses Duration Effort Prerequisites
Compilers 9 weeks 6-8 hours/week none
Software Debugging 8 weeks 6 hours/week Python, object-oriented programming
Software Testing 4 weeks 6 hours/week programming experience
LAFF: Programming for Correctness 7 weeks 6 hours/week linear algebra
Introduction to Parallel Programming 12 weeks C, algorithms
Software Architecture & Design 8 weeks 6 hours/week software engineering in Java

Advanced math

Topics coveredparametric equations polar coordinate systems multivariable integrals multivariable differentialsprobability theory and more

Courses Duration Effort Prerequisites
Calculus: Parametric Equations and Polar Coordinates single-variable calculus (Calculus Two)
Multivariable Calculus 13 weeks 12 hours/week Parametric Equations and Polar Coordinates
Introduction to Probability – The Science of Uncertainty 18 weeks 12 hours/week Multivariable Calculus

Advanced systems

Topics covereddigital signaling combinational logic CMOS technologies sequential logic finite state machinesprocessor instruction sets caches pipelining virtualization parallel processing virtual memory synchronization primitives system call interface and more

Courses Duration Effort Prerequisites
Electricity and Magnetism, Part 11 7 weeks 8-10 hours/week calculus, basic mechanics
Electricity and Magnetism, Part 2 7 weeks 8-10 hours/week Electricity and Magnetism, Part 1
Computation Structures 1: Digital Circuits 10 weeks 6 hours/week electricity, magnetism
Computation Structures 2: Computer Architecture 10 weeks 6 hours/week Computation Structures 1
Computation Structures 3: Computer Organization 10 weeks 6 hours/week Computation Structures 2

1 Note: These courses assume knowledge of basic physics. (Why?) If you are struggling, you can find a physics MOOC or utilize the materials from Khan Academy: Khan Academy – Physics

Advanced theory

Topics coveredformal languages Turing machines computability event-driven concurrency automata distributed shared memory consensus algorithms state machine replication computational geometry theory propositional logicrelational logic Herbrand logic concept lattices game trees and more

Courses Duration Effort Prerequisites
Introduction to Logic 10 weeks 4-8 hours/week set theory
Automata Theory 8 weeks 10 hours/week discrete mathematics, logic, algorithms
Reliable Distributed Systems, Part 1 5 weeks 5 hours/week Scala, intermediate CS
Reliable Distributed Systems, Part 2 5 weeks 5 hours/week Part 1
Computational Geometry 16 weeks 8 hours/week algorithms, C++
Introduction to Formal Concept Analysis 6 weeks 4-6 hours/week logic, probability
Game Theory 8 weeks x hours/week mathematical thinking, probability, calculus

Advanced applications

These Coursera Specializations all end with a Capstone project. Depending on the course, you may be able to utilize the Capstone as your Final Project for this Computer Science curriculum. Note that doing a Specialization with the Capstone at the end always costs money. So if you don’t wish to spend money or use the Capstone as your Final, it may be possible to take the courses in the Specialization for free by manually searching for them, but not all allow this.

Courses Duration Effort Prerequisites
Robotics (Specialization) 26 weeks 2-5 hours/week linear algebra, calculus, programming, probability
Data Mining (Specialization) 30 weeks 2-5 hours/week machine learning
Big Data (Specialization) 30 weeks 3-5 hours/week none
Internet of Things (Specialization) 30 weeks 1-5 hours/week strong programming
Cloud Computing (Specialization) 30 weeks 2-6 hours/week C++ programming
Full Stack Web Development (Specialization) 27 weeks 2-6 hours/week programming, databases
Data Science (Specialization) 43 weeks 1-6 hours/week none
Functional Programming in Scala (Specialization) 29 weeks 4-5 hours/weeks One year programming experience

Final project

OSS University is project-focused. You are encouraged to do the assignments and exams for each course, but what really matters is whether you can use your knowledge to solve a real world problem.

After you’ve gotten through all of Core CS and the parts of Advanced CS relevant to you, you should think about a problem that you can solve using the knowledge you’ve acquired. Not only does real project work look great on a resume, the project will validate and consolidate your knowledge. You can create something entirely new, or you can find an existing project that needs help via websites like CodeTriage or First Timers Only.

Another option is using the Capstone project from taking one of the Specializations in Advanced applications; whether or not this makes sense depends on the course, the project, and whether or not the course’s Honor Code permits you to display your work publicly. In some cases, it may not be permitted; do not violate your course’s Honor Code!

Put the OSSU-CS badge in the README of your repository! Open Source Society University - Computer Science

  • Markdown: [![Open Source Society University - Computer Science](](
  • HTML: <a href=""><img alt="Open Source Society University - Computer Science" src=""></a>


Upon completing your final project, submit your project’s information to PROJECTS via a pull request and use our communitychannels to announce it to your fellow students.

Your peers and mentors from OSSU will then informally evaluate your project. You will not be “graded” in the traditional sense — everyone has their own measurements for what they consider a success. The purpose of the evaluation is to act as your first announcement to the world that you are a computer scientist, and to get experience listening to feedback — both positive and negative — and taking it in stride.

The final project evaluation has a second purpose: to evaluate whether OSSU, through its community and curriculum, is successful in its mission to guide independent learners in obtaining a world-class computer science education.

Cooperative work

You can create this project alone or with other students! We love cooperative work! Use our channels to communicate with other fellows to combine and create new projects!

Which programming languages should I use?

My friend, here is the best part of liberty! You can use any language that you want to complete the final project.

The important thing is to internalize the core concepts and to be able to use them with whatever tool (programming language) that you wish.

Pro CS

After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor’s degree in Computer Science, or quite close to one. You can stop in the Advanced CS section, but the next step to completing your studies is to develop skills and knowledge in a specific domain. Many of these courses are graduate-level.

Choose one or more of the following specializations:

These aren’t the only specializations you can choose. Check the following websites for more options:

Where to go next?

  • Look for a job as a developer!
  • Check out the readings for classic books you can read that will sharpen your skills and expand your knowledge.
  • Join a local developer meetup (e.g. via
  • Pay attention to emerging technologies in the world of software development:
    • Explore the actor model through Elixir, a new functional programming language for the web based on the battle-tested Erlang Virtual Machine!
    • Explore borrowing and lifetimes through Rust, a systems language which achieves memory- and thread-safety without a garbage collector!
    • Explore dependent type systems through Idris, a new Haskell-inspired language with unprecedented support for type-driven development.

keep learning

originally posted on Github ->  source