Being a programmer and web developer, I have learned a lot from articles titled as 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 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 beginner and newcomers, as they are the ones, who lack practical knowledge. Since most of these post are actually driven by practical knowledge, beginner and intermediate programmers can take a lot from it. Also getting 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 almost certainly won’t understand some details about floating point number or get confused with subtle details of memory, but it’s important to keep these list handy and refer them time to time with a context.
Problem-solving is one art or we can say that it is one type of skill. There are so many different types of problems either big or small. It is important how to deal with problems. There are so many options are available for that. We have to try for a solution. If that doesn’t work, try another one. If that doesn’t work, repeat until you luck out. Problem-solving skills are almost unanimously the most important qualification that employers look for….more than programming languages proficiency, debugging and system design. This article explains in brief about what we should do when you encounter a new problem and follow the steps to solve a particular problem.
This is one of the classic article, which will take you through may 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 a modern system becomes even more important if you are in space of writing high-performance application. 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 level of experience.
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 a == operator. Many of us often make a mistake of doing a 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 do perform a monetary calculation, when to use float, double or Big Decimal 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.
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 many 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.
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 efficiency of that. Problems become worse if you using trial and error method because you will never able to solve your problem by doing that. There are so many things which can go wrong and there is an equal number of misconceptions. Things like, whether 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 misconception about time will go away and you will build sound fundamental about Time, by reading this classic article.
see also: Top 10 programming Language By Google
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 protocol. This article also explores the common pitfalls of URLs e.g. character encoding, reserved character at a different part 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 application, the right way. How to construct URL and using Apache Commons HTTP client library. Finally, it also suggests best practices or dealing with URLs e.g. you should encode URLs when you build them, making sure your URL-rewrite filters deal with your URL correctly and many more. In short, a must read an article for any web developer and programmer.
This is another article, which is very important for web developers, programmers, and blogger. SEO is too big to ignore since many programmers are also a blogger, it’s important to learn a few basics of Search Engine Optimization to help Google find their content and present to other fellow programmers. Since no company can survive without a web presence in today’s interconnected 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.
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 of Why some of the programmers 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 a sea of undefined behavior.
From the article itself “You’re a programmer. Have you ever wondered how multi-player 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.
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 must for any Java developer. This article touches many important areas of String including string pool, the string literal, comparing String using == vs equals(), converting bytes to String, Why String is immutable, properly concatenating Strings and many more. An advanced programmer may already know all these kinds of stuff but even then it’s good to revise them.
This question was asked by one computer programming student in StackOverflow. Just like we learn a lot about general programming concepts e.g. operating system, algorithm, 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, a piece of basic minimum knowledge is a must for every programmer.
This is the bonus article but must read for every Programmer. In order to write the high-performance application in any programming language e.g. 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 the 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 round trip 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. A 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.