< PrevAllNext >

I am not a Java Developer

(Sep 15th, 2013 at 12:38:24 AM)

I am a programmer.

To me that means understanding how a computer works well enough to be able to augment or alter its operation, typically in order to enhance the experience of one or more end-users. To become a programmer I have had to learn about nearly every technological and intellectual advancement that have made computers possible. This includes:

  • Circuitry
    • How divert electrical flow to implement simple logical processes such as addition
    • How to create circuits that "remember" values (Flip-Flops)
    • How to use the above to create the circuitry for a general-purpose computer
  • Operating Systems
    • How "binary” translates into programs that actually do things
    • How programs can be loaded into a computer and how they operate
    • How access to memory and files are handled safely and efficiently
    • How multiple programs can run at once without getting in each others way
  • Networking/Information Science
    • How computers can communicate and how modems and routers facilitate this
    • How data can be transferred quickly and securely (this is an unbelievably huge field)
    • How mistakes in data can be found and sometimes fixed
  • Databases
    • How large amounts of data can be stored in meaningful ways
    • How to pull meaningful information out of large corpuses of data
    • How to optimize data storage and usage
  • Programming
    • What a compiler is and how they can turn words into programs
    • How compilers optimize what programmers have written automatically
    • How to code in C, C++, Java, PHP, Python, Lisp, bash, HTML/CSS, JavaScript, etc. and what the trade-offs of using a given language are
    • How programming languages can be built on top of and updated
    • How to design new languages and write compilers and other tools for programmers
    • Hundreds of do's and don'ts of programming and how to fix broken programs
The list could certainly be much longer, but I have made a point to list at least these core topics, not to show how much I know, but because these tools and concepts are how I define my abilities as a programmer. They are what I think about every day and are, now, how I make sense of the world around me. To become a programmer I have had to re-program my brain.

Languages

Anyone that has seen me get excited about explaining a topic related to computers knows that it can sometimes seem as though I am speaking a different language. And aside from the expression, I think most people are aware that there are different "programming languages" even if they don't really know anything more than that.

At a high level, a programming language is just a way of describing, in text, what you would like a computer to do. Considering the slew of things your computer can do, I probably don't have to motivate how complicated even a single programming language can get when you want to do something that's actually useful. Even when experienced programmers and learning a new language they have to start somewhere, and any programmer will tell you that you always say "Hello, world!" before you do anything else.

Here is one way to do so in C:

#include <stdio.h>

int main()
{
        printf("Hello, world!\n");
        return 0;
}
No need to explain because this isn't a tutorial, but it illustrates what a simple program might look like. To give you an idea of how different languages can be, here is the same program in Python:
print("Hello, world!")
Needless to say, this is quite a bit simpler and there are many, many reasons to do things in one of many different ways.

Developers

In general, programmers are often referred to by the language or skill set that they are most familiar with. Someone that writes websites is called a "Web Developer," someone that typically codes in Python is called a "Python Developer." There are many reasons for doing this, but I think it is more often than not a simple way of letting you know what someone is either currently doing for a project and/or for which tasks they are generally useful. Nearly every developer has a preferred set of tools and languages that they use to meet various requirements or limitations of a given project or infrastructure.

At my current job I am writing nothing but Java (and SQL). Java isn't my favorite language, but it's certainly simple and featureful. It is, at this point, probably the most favored language in business for applications with average expectations for performance and no particular need for integration with Microsoft tools. I think this can, in some respects, be mostly attributed to (1) the large number of programmers that know Java well enough to write applications of average complexity fairly quickly, and (2) the fact that Oracle develops the JVM (the key component that makes Java work), which means that businesses can pay for support from the source, rather than having to find and hire auxiliary experts on Java to make sure all of their systems continue to work properly and securely (this necessity for support is rampant in big business and is one of the primary reasons why FOSS can often take a while to be adopted in the corporate realm).

Regardless of the politics, Java is the job and I am often labeled a "Java Developer." This is a serious understatement of my abilities overall and even of what I do on a day to day basis. My understanding of memory management, databases, networking, security, Unix, polymorphism, and a wide range of other topics are what make me good at my job. I use my in-depth knowledge of how computers work every day to improve and maintain the stability and utility of our systems. It's a shame there isn't a concise way to express that.

Being a Programmer

Becoming a programmer has been one of the most illuminating experiences of my life (and all somewhat by accident!). I have developed (pun intended) a variety of extremely practical skills that will serve me for the rest of my life.

I really just hope that, if only through this, people can understand why I (and many others) are so passionate about the work the we do as programmers. To know that we are a part of a legacy of people that have lost countless hours of sleep, and time with their family and friends, to create what so many of us take for granted. Realizing that we have to understand a thing to it's most basic details to be able to code it, often even better than the person asking for it, makes it so much less frustrating when something doesn't work or doesn't exist. And knowing that you could make it yourself, given time alone, is the most empowering part.

So when I am called a "Java Developer," I do not get upset or frustrated. I'm proud of the role I am able to play. But every once-in-a-while, I think it's worth highlighting what it took for me to get here, and to recognize the world into which I have been so deeply indoctrinated.

Comments