Understanding the Effects of Net Neutrality on Web Programmers

There has been a lot of hubbub about net neutrality. I even saw not one, but two articles about the topic in my local newspaper the other day. Of course the discussion has been going on for a while now and will continue to go on—eventually ending up in the courts. My initial interest in the topic is different from almost every other account you read. While everyone else seems to be concerned about how fast their app will run, I’m more concerned about getting new applications out and allowing them to run correctly on a wide range of systems.

Both HTML5 Programming with JavaScript for Dummies and CSS3 for Dummies speak to the need of performance testing. Neither book covers the topic in detail or uses exotic techniques, but it’s an issue every good programming book should cover. Of course, I had no idea at the time I wrote these books that something like net neutrality would become fact. The developer now has something new to worry about. Given that no one else is talking much about developer needs, I decided to write Considering Net Neutrality and API Access. The article considers just how developers are affected by net neutrality.

If net neutrality remains the law of the land, developers of all types will eventually have to rethink strategies for accessing data online as a minimum. However, the effects will manifest themselves in even more ways. For example, consider how net neutrality could affect specialty groups such as data scientists. It will also affect people in situations they never expected. For example, what happens when net neutrality assures equal access speeds for the x-ray needed to save your life and that online game the kid is playing next to you? Will people die in order to assure precisely equal access. So far, I haven’t found anyone talking about these issues. There just seems to be this nebulous idea of what net neutrality might mean.

My thought is that we need a clearer definition of precisely what the FCC means by equal access. It’s also important to define exceptions to the rule, such as medical needs or real time applications, such as self-driving cars. The rules need to spell out what fair really means. As things sit right now, I have to wonder whether net neutrality will end up being another potentially good idea gone really bad because of a lack of planning and foresight. What are your ideas about net neutrality? Let me know at John@JohnMuellerBooks.com.

 

Using My Coding Books Effectively

A lot of people ask me how to use my books to learn a coding technique quickly.  I recently wrote two articles for New Relic that help explain the techniques for choosing a technical book and the best way to get precisely the book you want. These articles are important to you, the reader, because I want to be sure that you’ll always like the books you purchase, no matter who wrote them. More importantly, these articles help you get a good start with my coding books because you start with a book that contains something you really do need.

Of course, there is more to the process than simply getting the right book. When you already have some experience with the language and techniques for using it, you can simply look up the appropriate example in the book and use it as a learning aid. However, the vast majority of the people asking this question have absolutely no experience with the language or the techniques for using it. Some people have never written an application or worked with code at all. In this case, there really aren’t any shortcuts. Learning something really does mean spending the time to take the small steps required to obtain the skills required. Someday, there may be a technology that will simply pour the knowledge into your head, but that technology doesn’t exist today.

Even reading a book cover-to-cover won’t help you succeed. My own personal experiences tell me that I need to use multiple strategies to ensure I actually understand a new programming technique and I’ve been doing this for a long time (well over 30 years). Just reading my books won’t make you a coder, you must work harder than that. Here is a quick overview of some techniques that I use when I need to discover a new way of working with code or to learn an entirely new technology (the articles will provide you with more detail):

  • Read the text carefully.
  • Work through the examples in the book.
  • Download the code examples and run them in the IDE.
  • Write the code examples by hand and execute them.
  • Work through the examples line-by-line using the debugger (see Debugging as An Educational Tool).
  • Talk to the author of the book about specific examples.
  • Modify the examples to obtain different effects or to expand them in specific ways.
  • Use the coding technique in an existing application.
  • Talk to other developers about the coding technique.
  • Research different versions of the coding technique online.
  • View a video of someone using the technique to perform specific tasks.

There are other methods you can use to work with my books, but this list represents the most common techniques I use. Yes, it’s a relatively long list and they all require some amount of effort on my part to perform. It isn’t possible to learn a new technique without putting in the time required to learn it. In a day of instant gratification, knowledge still requires time to obtain. The wisdom to use the knowledge appropriately, takes even longer. I truly wish there were an easier way to help you get the knowledge needed, but there simply isn’t.

Of course, I’m always here to help you with my books. When you have a book-specific question, I want to hear about it because I want you to have the best possible experience using my books. In addition, unless you tell me that something isn’t working for you, I’ll never know and I won’t be able to discuss solutions for the issue as part of blog post or e-mail resolution.

What methods do you use to make the knowledge you obtain from books work better? The question of how people learn takes up a considerable part of my time, so this is an important question for my future books and making them better. Let me know your thoughts about the question at John@JohnMuellerBooks.com. The same e-mail address also works for your book-specific questions.

 

Viability of Java Programming as a Job

I get a lot of e-mail from readers asking whether I can tell them about their chances of getting a job using a particular programming language or skill that I write about. There are so many factors to consider in answering that question that it really is impossible to answer correctly or with any accuracy. Books, such as Java eLearning Kit for Dummies, provide you with a marketable skill that can potentially land you a job. In fact, The Importance of Finding Work post provides you with some ideas on just where you can find an interesting job writing Java code. I can also tell you that Java is both popular and important as far as programming languages are concerned. A recent InfoWorld article, Good news, Java developers: Everyone wants you, literally screams opportunity in the title. You can find further confirmation in the recent TIOBE index that places Java as the second most popular language in the world. All these indicators tell you that Java is a good selection for success.

Whether you can get a job programming with Java is an entirely different story. For example, there isn’t any way I can judge your skill at using Java, so there is no way I even know if you’re able to write applications. Being able to use Java to write applications is a prerequisite to getting the job, so only you know what your chances are in this area. If you’re honest with yourself, you know your skill level and whether you really do need more time practicing your skills before you go in for a job interview. Being realistic about your chances of getting a particular job is also important. If you try to get a leadership position with beginner skills, be prepared for disappointment.

If I could limit the criteria to issues such as job availability and your personal skills, I might be able to answer your question with some degree of success. However, the question is far more complex than that. A glut in people with basic skills could affect your chances of getting a job in a particular area. Likewise, if employers are looking for someone, anyone, to fill a position, you might get into a really good position with lackluster skills.

How you present yourself to a potential employer also affects the potential for success. Many highly skilled developers lack the kind of self-confidence required to get a job. The person in HR will see your interpersonal skills, not your ability to write code. Unless you have an in with the department you want to work with, trying to convince someone in HR to let the interview process go further could be quite hard.

I really do want you to succeed. So, I’ll continue to provide you with ideas of where to find work and the popularity of the skills that I’m helping you obtain. Unfortunately, my ability to provide help beyond these two areas is limited. In most cases, the rest is up to you. In keeping with the idea of preparing you as fully as I can to get that job of your dreams, I’m always open to answering your book-specific questions. Always feel free to contact me at John@JohnMuellerBooks.com.

 

The Importance of Finding Work

Readers sometimes show patterns in the questions they ask and, in some cases, the pattern shows across a number of my books. When I started to note that readers were interested in discovering just how to earn a living once they have developed a new skill and that they were interested in me providing that information, I started adding a new section to many of my books, such as MATLAB for Dummies, that describes what sort of industries could use the skills the reader has learned. However, I don’t want anyone to be bored to tears either, so I made a point of listing interesting vocations. It’s my feeling that readers want to be engaged in their work. Of course, jobs with less pizzazz are always available and you might have to accept one of them—at least in the short term.

I didn’t provide such a listing for Java eLearning Kit for Dummies. My thought was that Java jobs are so plentiful that readers could probably find a job they liked without too much trouble. However, even with this book, I’ve received more than a few queries about the issue. That’s why I wrote 10 Surprisingly Interesting Ways to Earn a Living Using Java recently for New Relic. As with all my other job listings, this article focuses on jobs that could be really interesting and most definitely rewarding. Of course, not every job is for every person out there—you need to read the article to find the kind of job you like best.

One reader actually did ask why I focused my efforts on interesting (or at least, unusual) jobs. It all comes down to my personal vision of work. I get up every morning with all kinds of cool ideas to try for my books. I actually like opening my office door, starting up my systems, and getting down to writing. For me, work is an enjoyable experience—so much so, that I often forget that it’s work. I’d like other people to have that experience—to have the joy of enjoying their work so much that they really hate to leave at the end of the day.

Of course, there are other languages out there and I have other books that lack lists of jobs. If you find that one of my books is lacking this sort of information, and you really would like me to research the kinds of jobs that are available, let me know at John@JohnMuellerBooks.com. I’d like to hear which book should receive a listing of associated jobs next. In the meantime, be sure to enjoy the Java job listing. You might see your dream job listed, you know, the one you didn’t think existed.

 

API Security and the Developer

As our world becomes ever more interconnected, developers rely more and more on code and data sources outside of the environment in which the application runs. Using external code and data sources has a considerable number of advantages, not the least of which is keeping application development on schedule and within budget. However, working with APIs, whether local or on someone else’s system, means performing additional levels of testing. It isn’t enough to know that the application works as planned when used in the way you originally envisioned it being used. That’s why I wrote API Security Testing: Think Like a Bad Guy. This article helps you understand the sorts of attacks you might encounter when working with a third party API or allowing others to use your API.

Knowing the sources and types of potential threats can help you create better debugging processes for your organization. In reality, most security breaches today point to a lack of proper testing and an inability to debug applications because the inner workings of that application are poorly understood by those who maintain them. Blaming the user for interacting with an application incorrectly, hackers for exploiting API weaknesses, or third parties for improperly testing their APIs are simply excuses. Unfortunately, no one is interested in hearing excuses when an application opens a door to user data of various types.

It was serendipity that I was asked to review the recent Snapchat debacle and write an article about it. My editorial appears as Security Lessons Courtesy of Snapchat. The problems with Snapchat are significant and they could have been avoided with proper testing procedures, QA, and debugging techniques.This vendor is doing precisely all the wrong things—I truly couldn’t have asked for a better example to illustrate the issues that can occur when APIs aren’t tested correctly and fully. The results of the security breach are truly devastating from a certain perspective. As far as I know, no one had their identity stolen, but many people have lost their dignity and privacy as a result of the security breach. Certainly, someone will try to extort money from those who have been compromised. After all, you really don’t want your significant other, your boss, or your associates to see that inappropriate picture.

The need to test APIs carefully, fully, and without preconceived notions of how the user will interact with the API is essential. Until APIs become more secure and developers begin to take security seriously, you can expect a continuous stream of security breaches to appear in both the trade press and national media. The disturbing trend is that vendors now tend to blame users, but this really is a dead end. The best advice I can provide to software developers is to assume the user will always attempt to use your application incorrectly, no matter how much training the user receives.

Of course, it isn’t just APIs that require vigorous testing, but applications as a whole. However, errors in APIs tend to be worse because a single API can see use in a number of applications. So, a single error in the API is spread far wider than a similar error in an application. Let me know your thoughts on API security testing at John@JohnMuellerBooks.com.

Avoiding Unwanted Spaces

Some time back, I created the Adding a Location to the Windows Path blog post to help readers make better use of some of my book examples. Adding a location to the path makes it possible for Windows to locate applications with greater ease. However, that post didn’t make it clear that a space in a path would cause problems. For example, a path such as, C:\Windows; C:\Python33 (note the space) won’t work. In order for the path to work, each individual path must be separated from the others with just a semicolon, such as C:\Windows;C:\Python33. If you’ve added a path to your Windows setup and find that Windows can’t locate the applications you want to use, please check for an unwanted space in the path.

The limitation on using spaces in a path makes sense because you also have to restrict their use at the command line. For example, typing Dir /A D (with a space between the A and the D) will produce an error. In order to obtain the correct results, you must type Dir /AD and press Enter. The reason the space causes a problem is because the command processor treats spaces as a delimiter, a separator between command elements. The space tells the command processor that one element has ended and a new one has started.

Spaces can creep into commands with relative ease. All it takes is a relatively simple tap on the spacebar at the wrong time. In addition, spaces can be hard to spot when you use certain fonts. When working in an editor to create batch files or other permanently stored command forms, always use a mono-space font, such as Courier New, to make spaces easier to spot. The point is to look for unwanted spaces when a command line feature doesn’t work properly and you know you have typed the correct command.

As a reminder from my books, the command line can also be case sensitive in some cases. Make sure you check your commands to ensure they’re formatted correctly. Let me know about your book-specific command line issue at John@JohnMuellerBooks.com.

 

Using Hypermedia to Your Advantage

Many developers are familiar with the task of making a request to a server and receiving a response. We’ve been performing the same task since before the PC even appeared on the scene. So, it’s hard to imagine that anything new has come up. Hypermedia is that new thing, but before we go to far, let me fill in a few details.

When working on the Web, these requests normally go through a Web service that relies on a technology such as SOAP or REST. The essential idea is always the same—send a request, receive a response to that request (even when the response is an error). Of course, the Web adds it’s own wrinkles to the process. For example, most Web services rely on text-based data transfers, rather than the binary transfers used in the past.

The problem with this request/response scenario is that it assumes that the Application Programming Interface (API) used to make the transfer of information happen is well-documented by the provider and also well-understood by the developer. Unfortunately, documentation is often poor and understanding is even poorer. Wouldn’t it be nice if along with the response to a request, a developer also received a list of things that the result allows. Hypermedia performs precisely that task. When you make a request to a service that provides hypermedia support, not only do you get the information you requested, but you also get a list of things you can do with that information.

Hypermedia has just started picking up steam in the last year, so it doesn’t appear in any of my current books (you can bet it will in the future). However, I recently wrote an article about it entitled, Working with Hypermedia APIs. The article provides you with a good overview of what hypermedia APIs can do for you, why they’re an important new way of working with services, and what you can expect from them. Still, hypermedia APIs are in their infancy and I’ll eventually need to provide additional information about them.

Precisely what I do depends on your response to the article and to this post. For example, it may eventually be a good idea to get into the design criteria for hypermedia APIs. On the other hand, it may be better to start with existing hypermedia API services so that you can better see how they work. I’d like to hear from you about your interest level in the topic so that I know how to proceed. Make sure you write me about hypermedia APIs at John@JohnMuellerBooks.com or provide a comment to this blog post.

 

Updating Your Copy of Java

It’s almost never a good idea to keep really old versions of software on your system that provide some sort of security or Internet access functionality. One of the worst technologies in this regard is Java. It seems like everyone wants to pick on every security flaw found in Java, probably because the language is so incredibly popular and it’s available on just about every platform on the planet. There have been all sorts of attempts by vendors to remove Java because it’s perceived as such a problem. Microsoft is now trying to take some action regarding Java. You can read the full details in Microsoft to block outdated Java versions in Internet Explorer on ZDNet. However, the short version is that if you’ve been holding off updating your copy of Java, you can’t wait much longer and expect it to continue working.

Of course, this news brings me to my books. A number of my books either discuss Java directly or rely on Java in some other way that depends on Internet Explorer support. For example, when working with Java eLearning Kit for Dummies, you need to use Java and if you’re working on the Windows platform, it’s likely that you’re using Internet Explorer. If you’ve also been limping along with that really outdated copy of Java, the examples in the book may not work after Tuesday (August 12). Microsoft has a way of slipping in updates at times in ways that people really don’t catch until it’s too late.

Mind you, I think this is a good update because old software is just too easy exploit by those nefarious individuals trying to steal your credit information and turn your computer into a zombie. Of course, updates can create havoc with book examples as well. If you do perform an update and find that you’re having a problem with an example that used to work in books that rely on Java, please be sure to let me know about it at John@JohnMuellerBooks.com. I want to ensure your book examples continue to run even after the much needed update.

 

Coding Schools and the Learning Process

There are three essential ways to begin a career as a developer. The first is to get a college degree in the subject, which is normally a Bachelor of Computer Science or a Bachelor of Information Technology (amongst other degrees). The second is to teach yourself the trade, which means spending a lot of time with books and in front of your screen working through online tutorials. The third is a new option, coding school. The third option has become extremely popular due to limitations in the first two techniques.

The cost of a college education has continued to skyrocket over the past few decades until it has started to elude the grasp of more than a few people. I’ve read estimates that a college degree now costs between $20,000 and $100,000 in various places. How much you actually pay depends on the school, your personal needs, and the electives you choose. The point is that many people are looking for something less expensive.

A college education also requires a large investment in time. A four year degree may require five or six years to actually complete because most people have to work while they’re going to school. A degree is only four years when you can go full time and apply yourself fully. Someone who is out of work today and needs a job immediately can’t wait for five or six years to get a job.

Teaching yourself is a time-honored method of obtaining new skills. I’ve personally taught myself a considerable number of skills. However, I’m also not trying to market those skills to someone else. My self-taught skills usually come in the areas of crafting or self-sufficiency (or sometimes a new programming language). The problem with being self-taught is that you have no independent assessment of your skills and most employers can’t take time to test them. An employer needs someone with a proven set of skills. Consequently, self-teaching is extremely useful for learning new hobbies or adding to existing (proven) skills, but almost valueless when getting a new job. In addition, few people are actually motivated enough to learn a new skill completely (at the same level as a college graduate) on their own.

Coding schools overcome the problem with self-teaching because they offer proof of your skills and ensure you get a consistent level of training. You get the required sheepskin to show to employers. They also address deficiencies in the college approach. The time factor is favorable because most of these schools promise to teach you basic development skills in three months (compared to the five or six years required by a college). In addition, the cost is significantly less (between $6,000 and $18,000). So, it would seem that going to a coding school is the optimum choice.

Recently people have begun to question the ability of coding schools to fulfill the promises they make. It’s important to consider what a coding school is offering before you go to one. The schools vary greatly in what they offer (you can see reviews of three popular code schools at http://www.mikelapeter.com/code-school-vs-treehouse-vs-codecademy-a-review/). However, there are similarities between schools. A coding school teaches you the bare basics of a language. You don’t gain the sort of experience that a college graduate would have. In addition, coding schools don’t teach such concepts as application design or how to work in a team environment. You don’t learn the low-level concepts of how application development works. I don’t know if building a compiler is still part of the curriculum at colleges, but it was one of my more important learning experiences because I gained insights into how my code actually ended up turning switches on and off within the chips housed in the computer.

I see coding schools as fulfilling an important role—helping those who do have programming skills to build competence in a new language quickly. In addition, a coding school could provide an entry point for someone who thinks they may want a computer science degree, but isn’t certain. Spending a short time in a coding school is better than spending a year or two in college and only then finding out that computer science isn’t what the person wants. Coding schools could also help people who need to know how to write simple applications as part of another occupation. For example, a researcher could learn the basic skills require to write simple applications to aid in their main occupation.

People learn in different ways. It’s the lesson that readers keep driving home to me. Some people learn with hands on exercises, some by reading, and still others by researching on their own. Coding schools can fulfill an important role in teaching computer science, but they’re not even close to a complete solution. In order to get the full story about computer science, a student must be willing to invest the required time. Until we discover some method for simply pouring information into the minds of people, the time-consuming approach to learning must continue as it has for thousands of year. There really aren’t any shortcuts when it comes to learning. Let me know your thoughts about coding schools at John@JohnMuellerBooks.com.

 

Practice Icon on Page 59

A number of you have written to ask me about the Practice icon on page 59 of Java eLearning Kit for Dummies. It turns out that the practice won’t quite work as originally written because Java’s Random class now ensures that you get a random number each time you call it. As a result, the original practice no longer works.

In order to obtain consistent results from the example, you would need to set the seed to the same value every time. Here is an example of what I mean:

// Import the required API classes.
import java.util.Scanner;
import java.util.Random;
import java.util.Calendar;
 
public class ShowInt
{
    public static void main(String args[])
    {
        // Create the scanner.
        Scanner GetInt = new Scanner(System.in);
         
        // Obtain an int value.
        System.out.print("Type a number between 1 and 10: ");
        int YourGuess = GetInt.nextInt();
         
        // Get the current time.
        Calendar MyCal = Calendar.getInstance();
         
        // Create a random number generator.
        Random MyRandom = new Random();
         
        // Set the seed value for the random number using
        // the current number of milliseconds in the time.
        //MyRandom.setSeed(MyCal.getTimeInMillis());
        MyRandom.setSeed(5);
         
        // Obtain a random number between 1 and 10.
        int MyGuess = MyRandom.nextInt(10) + 1;
         
        // Display the value on screen.
        System.out.print("Your guess was: " + YourGuess);
        System.out.println(" My guess was: " + MyGuess);
    }
}

Notice that I’ve commented out the original MyRandom.setSeed(MyCal.getTimeInMillis()); line that ensures you get a more random result every time and added a new MyRandom.setSeed(5); line that sets the seed to the same value every time. Now when you run the example, you get the same value every time. On my system, the example guesses 8 every time.

This change to the practice should produce the desired result. I’m sorry about any confusion the original practice may have causes. Please let me know about any other book-related concerns at John@JohnMuellerBooks.com.