Wednesday, May 3, 2023

10 Articles Every Programmer Must Read

Being a Java programmer and Software developer, I have learned a lot from articles titled What Every Programmer Should Know about ....., they tend to give a lot of useful and in-depth information about a particular topic, which otherwise is very hard to discover. In my quest for learning, I have come across some very useful articles, which I have bookmarked for reference and multiple readings. I personally think that all programmers can benefit by reading these articles, which makes me write this post and share all of these "What Every Programmer Should Know" articles with you guys. These are from my personal bookmarks.

In this article, you will see classic what every programmer should know article from topics like memory, Unicode, floating-point arithmetic, networking,object-oriented design, time, URL Encoding, String, and many more.

This list is very important for beginners and newcomers, as they are the ones, who lack practical knowledge. Since most of these posts are actually driven by practical knowledge, beginner and intermediate programmers can take a lot from it.

Also gaining knowledge of fundamentals early in career helps to avoid mistakes, which has done by other programmers and software developers on their course of learning.

Though it’s not easy to grasp all knowledge given in these articles in just one reading. You probably won't understand some details about floating-point numbers or get confused with subtle details of memory, but it’s important to keep these lists handy and refer them from time to time with a context. So Good luck and Enjoy reading these wonderful articles.

By the way, don't forget to share any What Every Programmer Should know article if it’s not already on this list.




1. What Every Programmer Should Know about Memory

This is one of the classic articles, which will take you through many lanes of memory, some old, some new, some known, and some unknown. Despite being so conman and omnipresent, not every programmer have enough knowledge of Memory. Knowledge of memory in the modern system becomes even more important if you are in space of writing high-performance applications.

Hardware designers have come up with ever more sophisticated memory handling and acceleration techniques–such as CPU caches–but these cannot work optimally without some help from the programmer.

I am still reading this article, and I can't tell you how much I have learned from this about RAM, CPU Caches e.g. L1 and L2 cache, different types of memory, direct memory access, memory controller designs, and Memory in general. In short, a must-read for programmers of all levels of experience.


2. What Every Computer Scientist Should Know About Floating-Point Arithmetic

Floating-point arithmetic is a tricky topic, and it’s not easy to master. Even many Java programmer doesn't know what can go wrong when comparing float/double value with == operator. Many of us often make the mistake of doing the monetary calculation in float and double. This article is another gem of this series and a must-read for all software developers and programmers.

As your experience grows, you are expected to know subtle details of common things, and floating-point arithmetic is one of them. As a senior Java developer, you must know how to perform monetary calculation, when to use float, double or BigDecimal classes, how to round floating-point numbers, etc.

Even if you know the fundamentals of floating-point arithmetic, You will learn something new about floating point calculation by reading this article.



3. What Every Developer Should know about Unicode

Character encoding is another area, where many programmer struggles, and "The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)" aims to fill that gap. On a side note, Yes that's the full title of that article.

It was written by Joel Spolsky, one of the founders of statckoverflow.com. Joel has written this post on his blog almost 10 years back, but it is still relevant in today’s world. This article will teach you about What is Unicode, What is character encoding, how characters are represented using bytes, and much more.

One of the best things about this article is language and flow, even if you don't know anything about Unicode, you can easily follow. In short, one more must-read for all programmers, coders, and software engineers.


4. What Every Programmer Should know about Time

Apart from Character encoding, time and date are other areas, where many programmers struggle, including me. Even senior developers lost between GMT, UTC, daylight saving, and between leap seconds. Frankly speaking, It's not easy to deal with time zones without making any mistake, then add daylight savings and the effect of that.

Problems become worse if you using the trial and error methods because you will never able to solve your problem by doing that. There are so many things that can go wrong and there is an equal number of misconceptions.

Things like, whether the date contains time-zone or not can confuse you like hell, converting UNIX time to another time-zone can freak you out, forget about clock synchronization and delays. I hope many of your misconceptions about time will go away and you will build sound fundamentals about Time, by reading this classic article.


5. What every web developer must know about URL encoding

This article describes common misconceptions about Uniform Resource Locator (URL) encoding, then attempts to clarify URL encoding for HTTP, before presenting frequent problems and their solutions.

While this article is not specific to any programming language, it illustrates the problems in Java) and finish by explaining how to fix URL encoding problems in Java, and in a web application at several levels. You will learn the basics of URL grammar, general URL syntax in HTTP, and other protocols.

This article also explores common pitfalls of URLs e.g. character encoding, reserved character at the different parts of URL, and URL encoding/decoding issues. If you are a Java programmer, then you will also learn about how to handle URLs in Java applications, the right way.

How to construct URL and using Apache commons HTTP client library. Finally, it also suggests best practices or dealing with URLs like you should encode URLs when you build them, making sure your URL-rewrite filters deal with your URL correctly, and much more. In short, a must-read article for any web developer and programmer.



6. What should every programmer know about web development?

This is an interesting article from programmers stack exchange, about what should every programmer implementing the technical details of a web application consider before making the site public. This includes things ranging from Interface design and User Experience, Security, Web standards, Performance, Search Engine Optimization(SEO), Technology involved, and several important resources.

Since today's world is hugely dependent upon the internet and programmer having their personal site, a blog is quite common. Experience learned in this article will not even help in your professional work but also in your personal work.

You will learn about all key technology like HTTP, HTML, XML, CSS, JavaScript, browsers compatibility, tips to reduce the loading time of your website, XML sitemaps, W3C specifications, and several other key details.

What Every Programmer and Devleper Should know Memory, Time, Date, String,Unicode




7. What Every Programmer Should Know About SEO

This is another article, which is very important for web developers, programmers, and bloggers. SEO is too big to ignore since many programmers are also bloggers, it’s important to learn a few basics of Search Engine Optimization to help Google find their content and present it to other fellow programmers. 

Since no company can survive without a web presence in today's inter-connected world, SEO becomes even more important. If you own a start-up, selling any product, then SEO is something to care about. All programmers, especially web developers can largely benefit from this article. 

Remember, Search Engine Optimization is a vast and very dynamic subject, and also varies between different search engines e.g. Google, Yahoo, and others. So, In order to master this topic, you will always need to update your knowledge.


8. What Every C Programmer Should Know About Undefined Behaviour #1/3

The C programming language has the concept of "undefined behavior". Undefined behavior is a broad topic with a lot of nuances and that's one reason Why I like Java, less number of undefined behavior, less confusion, more stability, and more peace. 

Many seemingly reasonable things in C actually have undefined behavior, and this is a common source of bugs in programs. Beyond that, any undefined behavior in C gives license to the implementation (the compiler and runtime) to produce code that formats your hard drive, does completely unexpected things, or worse. Read this excellent article to deep dive into the sea of undefined behavior


9. What Every Programmer Need to know about networking

From the article itself "You’re a programmer. Have you ever wondered how multiplayer games work? From the outside, it seems magical: two or more players sharing a consistent experience across the network like they actually exist together in the same virtual world.

But as programmers, we know the truth of what is actually going on underneath is quite different from what you see. It turns out that it’s all an illusion." This is a very interesting article about networking, written for game programmers but I think every programmer and developer can benefit from this.


10. What Every Java Developer Should Know about String

This is my article on java.lang.String and what I personally think every Java programmer should know about it. The string is very important in day-to-day programming in Java and that's why good knowledge is a must for any Java developer. 

This article touches on many important areas of String including string pool, a string literal, comparing String using == vs equals(), converting bytes to String, Why String is immutable, properly concatenating Strings, and many more. 

Advanced programmers may already know all this stuff but even then it’s good to revise them.


11. What should every programmer know about security?

This question was asked by one computer programming student in StackOverFlow. Just like we learn a lot about general programming concepts like operating systems, algorithms, data structure, computer architecture, and other stuff, it's also important to know about security. 

Though Security is a vast topic ranging from encryption/decryption, SSL, web security, obfuscation, authentication, authorization, etc, basic minimum knowledge is a must for every programmer.

I personally didn't know much about Security when I started my career, It when I start writing Servlet/JSP based Java web applications, I come to know about web security and several security threats like SQL Injection, Denial of Service, XML Injection, Cross-site scripting, and others. 

As a Java developer, now I follow secure Java coding practices provided by Fortify, PMP, and other static code analysis providers.  This article is a very good collection of topics and links about Security and whether you are doing coding or not, you will surely benefit from this resource.


12. Latency Numbers Every Programmer Should Know

This is a bonus article but a must-read for every Programmer. In order to write a high-performance application in any programming language like Java or C++, you ought to know fundamental latency numbers e.g. how much time it takes to read a variable from memory, from L1 Cache, from the L2 cache, from random read in SSD, and from disk. 

How much time it takes to lock unlock on a mutex, to send a data packet from one city to another, or doing a roundtrip on the same data center. These latency numbers are independent of any programming language and part of core knowledge, a developer must have to write high-frequency low latency applications. 

The good thing about this link is that it also provides you a comparative analysis of how these latency numbers have evolved over the years. You can see what these latency numbers were in 2006 and what they are now.


That's all in this list of articles every Programmer must-read. By reading articles titles as What Every Programmer or Developer Should know, you gain in-depth knowledge of a particular topic. Frankly speaking, there are too many things to learn for programmers, learning a programming language like Java is just the tip of the iceberg, but isn't it many of us have a passion for learning. 

Programming is a challenging job, and the only thing that helps you all along your career is fundamental knowledge. things about Memory, Unicode, floating-point numbers, time, security are very important for any programmer. 

Few things are programming language-specific like my post about Java String and What every C programmer should know about undefined behavior, but they are still good to learn for many beginners and developers.


Other Programming Articles you may like

Thanks for reading this article so far. If you find this information useful and these articles worth reading then please share it with your friends and colleagues. If you have any questions or feedback then please drop a note. 

P. S. - If you are interested to learn more about things programmers should know, there is a lot of guidance available in terms of essential stuff for programmers, and you can find man great advice on the internet like 97 Things Programmer should know, a must-read for every serious programmer.

13 comments:

  1. "Personal bookmarks"? More like googling for "What Every Programmer Should Know" and taking the first 10 pages...

    ReplyDelete
  2. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

    http://www.joelonsoftware.com/articles/Unicode.html

    ReplyDelete
  3. Avoid Joel Spolsky's Unicode article - it's flawed and errored on a few technical points.

    ReplyDelete
  4. URL encoding? Web development? SEO? java.lang.String? Erp!

    10 Articles Every Programmer Must Read, where "Every" := "Every Java web developer".

    ReplyDelete
  5. The very first link, "What Every Programmer Should Know about Memory", is to a 114 page PDF. I think we're being very loose with the definition of "article." I would call that a book.

    ReplyDelete
  6. Wonderful piece of knowledge! Thank you! I would consider adding https://www.crypto101.io
    as it is contains incredible amounts of essential knowledge about crypto, their implementation and underlying mechanics and mathematical principles. Great reading!

    ReplyDelete
  7. I am completely amazed that nobody mentioned what every programmer should know about data modeling. I've been a programmer for many years, and the quality of the data models I have seen has been horrific.

    ReplyDelete
  8. In my experience in the real time embedded computing world, every programmer has to know about endianness ... and DOESN'T. Can't tell you how much time and money has been wasted because of this one simple subject. How about adding an article about endianness?

    ReplyDelete
  9. Typo in "This is my article on java.lang.String and what I personally thing every Java programmer should know about it." Thing should be think, I think.

    ReplyDelete
  10. I would add to this list a classic article by Nicholas Petreley titled "Programming for passion -- not profit -- produces high-quality software". The article I scanned from the original printed version in InfoWorld and is at the following link: http://www.lfsf.org/pub/quotes/nicholas_petreley-programming_for_passion.jpg

    ReplyDelete
  11. Beyond articles, every programmer should read three books: "Dreaming in Code", "Peopleware", and "The Mythical Man Month". If I could enforce just this one thing...just three books...the quality of communication between programmers would improve dramatically

    ReplyDelete
  12. link not open -> What every web developer must know about URL encoding

    ReplyDelete
  13. The link on "What Every Programmer Should Know about Memory" doesn't seem to exist anymore, but I found this:
    http://futuretech.blinkenlights.nl/misc/cpumemory.pdf

    ReplyDelete