The IT world is full of certifications. When I started in the tech world, CompTIA’s A+ certification was the standard for computer techs and the Microsoft’s MCSE certification showed you were a master of the Windows system admin world. Today, the IT world has numerous certifications available to indicate proficiency in networking, system administration, hardware, security, application proficiency, and so forth. The world also has numerous programming certifications now too. Two of the more well known certifications include Microsoft’s MCSD and Oracle’s Java certifications. But are they as useful A+, MCSE, CEH, or other certifications? I personally don’t think so. In all my days as a software engineer I have never once interviewed a single developer who had any programming certification. I have never had a fellow developer tell me about passing the newest version of a developer certification. I have never been asked by anyone if I’m certified in a programming language. It has literally never once mattered. In the past, I had considered seeking certification as a Java developer. Then I saw the sample test questions. My first thought? If I ever saw this kind of code in real life I would do everything in my power to ensure that the author was immediately fired. The questions test your ability to remember esoteric language rules — not things I want to ever see used in production systems. Many of the questions ask “what is the output of the below code” and provide a code snippet. If you have to ask what the output of a complex code fragment is, you probably wrote it poorly. If I really needed to know, I’d copy the code and run it. None of this is really of any value. So, your brain is a human code compiler — that’s great. But the real questions remain unanswered — do you understand design patterns? Can you decompose complex problems in to proper object models? Can you write maintainable code? Do you have good coding style? Do you document your code? Do you understand networks and databases? When I interview a developer, these are the questions I need answered — not what the output of a horribly convoluted nested loop is.
I frequently talk to parents as well as people in the educational community about what language kids should learn. Maybe they remember their uncle talking about Fortran, or they have a relative that uses Python – but they want to know what their children or students should be learning today. It’s a great question as the world of computer programming is always changing. The last 20 years has seen countless languages gain widespread usage — and I’m sure that’s not going to change anytime soon. Unfortunately, not everyone is up-to-date with their computer programs. Just a few years ago, a child where I was attending church asked if he could job shadow me for an assignment in his computer programming class. Always wanting to encourage young people to pursue technology, I was happy to oblige. When he came go my office, the first question I asked was what language he was learning. He gleefully responded: “COBOL!”. This was just a few years ago, and a student was being taught COBOL? I asked what else he was learning, and he said they were learning RPG and SQL. Wow. The only thing useful there is SQL – COBOL and RPG are long dead. But even SQL isn’t necessarily useful on its own as it’s not really a programming language, but a language for accessing data. So, what would I recommend people learn today? Well, a friend showed me a great website to help someone pick a language based on their interests – Best Programming Language For Me. The languages provided are modern, useful languages and their selections reflect the best choices for someone new to the art. Another great resource is the IEEE 2017 Top Programming Languages. Either of these sites can help you pick a language with a future – unlike learning COBOL today.
Anybody who knows me knows well that I value education. I have studied countless languages, formally trained in both locksmithing and herbal medicine, achieved a third degree black belt in taekwondo, and earned an associates degree in psychology. But what surprises most people is that I don’t have a degree in computer science. In fact, even the degree I do have was earned through a correspondence school less than 10 years ago. I did not go to college out of high school, I joined the army. And, just about everything I know about programming I taught myself. Why does this matter? Well, in today’s society there still seems to be a strong desire for candidates applying for programming positions to have a bachelors degree in computer science. Many job listing require a bachelors at a minimum. The unfortunate thing is that most of the best programmers I have ever encountered did not have a degree in computer science and many had no degree at all. Throughout my career, I have always been identified as among the best when it came time for reviews — so a degree is not necessary for someone to ascend to the top of the class. So what is needed? Programming is an art that is learned through doing — not through formal education. And that is where the problem begins. I have interviewed countless candidates for programming positions with degrees and, sadly, few of them really knew the first thing about programming. They had attended years of college, but couldn’t identify the objects in a problem or design a trivial database to house the corresponding data. Why? Because they had never actually programmed much of anything. Maybe they implemented a stack, a linked list, or a sorting algorithm. And, while an understanding of those things is important, they already exist in the libraries of every language out there. Have they ever written anything more than that? Typically, I hear graduates tell me about one or two projects they worked on. They have a degree, but they’ve only ever written one or two real programs. What’s the value to that? Their piece of paper has come with no actual knowledge or expertise. We seriously need to revamp our education system to focus on real world training and spend less time on the things which bring no value to the business world. If we do not, we will continue to watch computer-related jobs go to foreign firms that are better trained and cheaper than our own fellow Americans.
One of the biggest problems I see among practitioners of the tech arts is the square peg — round hole problem. Too many developers, for example, will use only one language to solve every problem they encounter. I am a Java expert — there isn’t anything I can’t write a Java program to do. However, there are things for which Java just isn’t well suited. A few years back, I needed a program to download several hundred thousand audio files. As a Java guru, my first thought was how I would solve this problem in Java. Since the server used REST services, I would need to either include REST client libraries or write my own client software. I would need to iterate through the hundreds of thousands of record numbers to download. And, of course, I would need to keep track of state, distribute across numerous servers, parallelize the process, and deal with recovery should the program crash. All of these things end up creating a rather large code base in Java that would have also required substantial testing. Then it occurred to me, why not use a shell script? I can output the audio file id numbers into a text file and split into chunks using the split command. I can use curl as the rest client. Then, I can just have multiple windows open and assign each running instance a chunk of the original list. The solution involved almost no code, the individual pieces are production ready, and recovery would just mean reprocessing the incomplete files. This is just one example, but this problem happens every day in the tech world — developers resorting to the single tool in their toolbox to solve a problem when far better solutions can be crafted with far more ease using a different tool. Ultimately, while I know every programmer will have a language they are most competent in, I believe everyone should have skills in a variety of other tools so they don’t end up wasting time crafting solutions for which their tools aren’t well suited.
As I start my blog, I thought the first thing I would write about is some of my favorite technologies. As a tech guy, I have experimented with a variety of technologies throughout the years. Some have been wins (Java, Unity, Docker, REST), and some have not (Delphi, IIS, SOAP). What are some of the technologies that really stand out to me? First, I love Java. The fact that I can write web applications as well as desktop applications that will run anywhere is amazing. I used to write C/C++ code, and while the promise of write once run anywhere is there, your mileage will vary. Java actually delivers flawlessly. The fact that Google chose Java for Android was just icing on the cake. Second on my list is Unity. For 3D game development, nothing is better than Unity. Not only can you create awesome 3D games, but you can do so with a modern, easy-to-use language (C#). In addition, Unity can export games to just about every platform imaginable including various consoles! Third would be the Adobe Creative Cloud. I must admit I am a relative newcomer to the Creative Cloud, but their tools are amazing. I doubt there is any creative endeavor in the digital world that their products won’t work to create. Not only is the breadth of their products amazing, each individual product is an industry leader – Photoshop, Illustrator, and InDesign are best-in-class products. There are lots of other technologies available, but these three represent some of the best tools I believe the IT world has to offer.