Being a Java programmer and Software 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 my quest 
of learning I have come across some very useful articles, which I have 
bookmarked for reference and multiple reading. I personally think that 
all programmer 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 beginner and newcomers, as 
they are the ones, who lacks practical knowledge. Since most of these 
post 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 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. 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 in this list.
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 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 == operator. Many of us often makes mistake of doing monetary calculation in float and double.
 This article is another gem of this series and 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 as senior Java developer, you must know 
how do perform monetary calculation, when to use float, double or BigDecimal classes,
 how to round floating point numbers etc. Even if you know 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 struggle, and "The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)"
 aims to fill that gap. On side note, Yes that's the full title of that 
article. It was written by Joel Spolsky, one of the founder 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 thing 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 is another area, where many
 programmers struggle, including me. Even senior developers lost between
 GMT, UTC, day light saving and between leap seconds. Frankly speaking, 
It's not easy to deal with time zones without making any mistake, then 
add day light savings and effect of that. Problems becomes 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 are equal number of misconceptions. Things like, whether date 
contains time-zone or not can confuse you like hell, converting UNIX 
time to other 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.
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 illustrate 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 basics of URL grammar, general URL syntax in HTTP and other 
protocol. This article also explores common pitfalls of URLs e.g. 
character encoding, reserved character at 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 suggest 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 article for any web developer and programmer.
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 about several important resources. Since 
today's world is hugely dependent upon internet and programmer having 
their personal site, blog is quite common. Experience learned on this 
article will not even help in your professional work but also in your 
personal work. You will learn about all key technology e.g. HTTP, HTML, 
XML, CSS, JavaScript, browsers compatibility, tips to reduce loading 
time of your website, XML sitemaps, W3C specifications and several other
 key details.
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 blogger, it’s important to learn few basics of 
Search Engine Optimization to help Google find their content and present
 to other fellow programmers. Since no company can survive without web 
presence in today's inter-connected world, SEO becomes even more 
important. If you own 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 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 have the concept of "undefined behaviour". 
Undefined behaviour is a broad topic with a lot of nuances and that's 
one reason of Why I like Java, less number of undefined behaviour, less 
confusion, more stability and more peace. Many seemingly reasonable 
things in C actually have undefined behaviour, and this is a common 
source of bugs in programs. Beyond that, any undefined behaviour 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 on sea of 
undefined behaviour
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 very interesting article about networking, written for game 
programmers but I think every programmer and developer can benefit from 
this.
This is my article on java.lang.String
 and what I personally thing every Java programmer should know about it.
 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, string literal, 
comparing String using == vs equals(),
 converting bytes to String, Why String is immutable, properly 
concatenating Strings and many more. Advanced programmer may already 
know all these stuffs but even then it’s good to revise them.
This question was ask 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, its also important to know about 
security. Though Security is vast topic ranging from 
encryption/decryption, SSL, web security, obfuscation, authentication, 
authorization etc, a basic minimum knowledge is must for every 
programmer. I personally didn't know much about Security when I started 
my career, its when I start writing Servlet/JSP based Java web 
application, 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 Java developer, now I follow secure Java coding 
practices provided by fortify, PMP and other static code analysis 
providers.  This article is very good collection of topics and links 
about Security and whether you are doing coding or not, you will surely 
benefit from this resource.
This is the bonus article, but must read for every Programmer. In order 
to write 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 take to read a variable from memory, from L1 Cache, from L2 
cache, from random read in SSD and from disk. How much time it take to 
lock unlock on mutex, to send a data packet from one city to another or 
doing a roundtrip on same data centre. 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. 
Good thing about this link is that it also provides you 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 article 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 a tip of iceberg, but isn't it 
many of us have passion for learning. Programming is a challenging job, 
and only things which help you all along your career is fundamental 
knowledge e.g. things about Memory, Unicode, floating point numbers, time, security is
 very important for any programmer, but they are still good to learn 
for many beginner and developers.
Hello, Iᡉm Dhananjaya Naidu Reddi, a passionate Java Developer based in the vibrant city of Bangalore, India. Like many of you visiting, I have a deep appreciation for Java and the art of software development. I have extensive experience as a Java/J2EE Full Stack developer, proficient in a wide range of technology frameworks and cloud technologies.
0 comments:
Post a Comment