Tag Archives: opinion

The Problem with Resolutions

I guess you could technically claim that I didn’t fail at the resolutions I made earlier this year. The year isn’t over, however I believe that having long term goals such as these may be a bad idea. At this point, I believe that many of the resolutions I made [I.e. Learning R, meeting people who dealt with airline systems, and learning GridGain] may not be the best use of my time.

It might be a better use of my time to do periodical reviews of my current skillsets and recent tasks rather than to push forward blindly.

I’m not giving up on learning new things. I’m just not going to limit myself to a list.

Some of the technologies/tools I’ve been learning lately:

  1. OpenStack
  2. ArchLinux

Some technologies I would like to learn:

  1. Storm
  2. Ansible

My Two Cents on Interviewing Software Engineers

In the technology industry, interviewing someone is a tough process. It is a very complex problem that attempts to solve a collection of goals into a [best case] mutually satisfactory outcome. The interviewer needs a person who will fit in the working environment, perform tasks that are expected, has the needed skills, and is competent to do that job, all while avoiding an undesirable hire. The interviewee is looking for a new position in a reasonable environment, with people they can trust, and that helps them obtain the lifestyle/financial goals that they wish to achieve. There are three outcomes of this process: hire, wait for more experience, or don’t hire. Dancing around the decision, or making this process more difficult helps neither party.

What I’ve found incredibly frustrating is the attitude of many of the interviewers that I have been interviewed by. Most of the individuals whom I have been interviewed by have been highly combative. They want you to prove that you know what they want you to know, whilst simultaneously proving that you would be a good cultural fit. For example, smaller organizations will throw out Google/Microsoft like interview questions just for appearances. Is this necessary for determining the quality of the applicant? I don’t believe that it is. Unless your industry requires every engineer to make close estimations, it appears to me that it is more of a way to build an unrealistic ‘tough-guy’ image. There is absolutely no reason for an interviewer to be combative with an interviewee. The goal, on the company’s side, is to find out if the applicant would provide value for the company. If an individual’s average day is fairly easy going, why make the interview stressful? It’s akin to demanding an auditioning actor to recite the entirety of Shakespeare’s work when interviewing for a non-speaking role in a 30 second commercial.

Another issue that I’ve found is the amount of criticism of interview code. I’ve had a range of this: “code portfolios,” sample programs prior to the interview, temporary assignments, IQ tests, talk and coding, and white board exercises. Only a few of these coding practices are reasonable, the others are unrealistic and stressful. The IQ/aptitude test was a part of the application process at IBM. It was a little silly, and timed, but I guess I was within their upper and/or lower limits for acceptance. The test was online and it was after the interview, so it wasn’t so stressful. I’ve had an organization request a coding portfolio; that is a horrible idea. Portfolios are required of those who do visual work, but code portfolios suffer from a lack of context, industry acceptance, and lack of time to compare and contrast multiple candidates’ submissions. I’ve had to work with one group temporarily [after the interview] as a trial period. This wasn’t so bad for a few reasons, one the company paid for my travel to get me there (going from the US to Europe), was only for a short time and lastly, it isn’t unreasonable to ask for this when considering very long distance applications. However, the downside to this is that it negatively impacts the discreteness of interviewing a new workplace.

I tend to like coding samples prior to the interview. If you’re given a problem set to choose from, it gives the interviewee a chance to emulate the conditions in which they would be working in. The interviewee is able to ponder, on his/her own schedule, about the problem, design, code, test, and package the code. I am not a fan of coding on a whiteboard. It is a completely different experience from how one codes. It strips away the tools and contexts, and expects the individual to perform their tasks in a completely foreign way. If the interviewer was asking for high level details, this request isn’t too far fetched. From my experience, there are a lot of organizations that attempt to have the interviewer watch an interviewee code via a live collaborative editor while on the phone. These are some of the worst interviews I’ve ever had. The task is not humanly possible. The tasks are usually set up in a professor/student manner. The process is usually: a problem is presented, thinking occurs, have the interviewee talk through a problem, code while explaining the code, and to use a foreign editor at the same time. To make things worse, this is all done while the interviewee is holding a phone and typing on a keyboard. It is not humanly possible for an individual to communicate, and solve deep problems at the same time, to make things worse you’re being judged at the same time.

Lastly, I have been asked to code up a problem or two, with the interviewer on a computer. This has been done in a peer-wise and non-peer-wise fashion. Usually this involves a small problem, and you’re given a new project in an IDE. At times, this may be a little tough if the IDE is unfamiliar, but this at least attempts to reproduce the working environment.

What are some of the questions that I would like to be asked?

I believe that an interview should be more for an inquisitive time between an interviewer and interviewee. There is no benefit from trying to make a stressful interview even more stressful via combative techniques. So I think there are a few questions that would make it easier:

  1. Ask questions related to the projects that the interviewee has worked on before. [Preferably a non-work based project]
  2. Ask about some of the challenges faced on the projects. For example, if the project required a high level of performance, how did they solve the communication issues between components? If the project dealt with numbers or precision or money, ask how they solved the issues with floating point math.
  3. Ask what an individual project taught the interviewee.
  4. Ask about times where the interviewee has conflict with another coworker; ask how he or she would have resolved the issue. (Don’t ask for opinions or gossip surrounding the conflict)
  5. Ask about what blogs/technical content they follow.

These questions get the interviewee to talk more about what they should be confident on talking about. The questions also demonstrate the ability to work with others, willingness to adapt, interests, technical strong points, experience, passion, and potential weak points. Lastly, to the interviewer, consider the individual that you are communicating, with being hostile won’t do you any favors if you have to work with them later.

PSA: Software Development Tip: Clean out your Code Base

There is a diplomatic mindset that many developers have: It’s better to orphan code, than it is to delete it. This, although less destructive in the short term, can become very destructive in the long run. Leaving orphaned code may:

  • Encourage Reuse later on
  • Dramatically increase build times
  • Increase the amount of time needed to perform version control [A bigger code base takes longer to examine]
  • Reduces one’s ability to navigate through the code.
  • Increase the executable size
  • Increase maintenance times

So in short: If the code is no longer needed and used, remove the dead code. If you’re using source control properly, the change can be reverted.

If the team you are working with still insists on orphaning code, at least have them to agree on periodic spring cleaning of the project.


 

Good News to those who use Maven and are working on J2EE web projects in IntelliJ: Here’s a guide.

 

A Skill that All Technical People Can Use (System administrators, Database Administrators, Developers, etc)

Top-notch communication skills are vital when communicating detailed technical topics. Poor communication skills are seen as a lack of interest, understanding, or motivation. I realize that perception isn’t always true, but making the correct impression on others is extremely important.

I’ve seen many of these “sins” from technical presentations in graduate school and within local technical group meetings. I’ve even run into some of these issues personally. A very good video about what I’m talking about his “Package Management and Creation in Gentoo Linux.” I realize that it’s easier to criticize than to present, however after you are aware of some of the issues below the presentation is becoming aggravating.  Donnie Berkholz, if you are reading this, I am not criticizing you personally.

  1. Rambling
  2. Use of “umm” and other fillers
  3. Poor posture
  4. Bad lighting
  5. Having a monotone voice (This isn’t a huge issue in the video)
  6. Mumbling
  7. Failure to list assumptions (What skills should your audience have)
  8. Failure to explain why the content you’re presenting is valuable to the audience
  9. Unorganized slides
  10. Lack of overall summary of the presentation at the beginning
  11. Lack of prior practice
  12. Lack of mentioning of where to find the slides online
  13. Going off topic within the presentation
  14. Lack of confidence in material
  15. Overloading the slide with lots of unneeded details
  16. Fanboyism (I’ve seen it in a few of my fellow students’ presentations in graduate school)
  17. Not tabling questions that go off topic (Not shown in the video)
  18. Low quality graphics (Not an issue in the video)
  19. Speaking too quickly (Not an issue in the video)

How would someone Improve Their Presentation Skills?

It’s not possible for a presenter to be able to find their own issues. Presenting is one of those things that requires feedback from others.

  1. Take a class on public speaking at their local university, technical school, or even library. Local toastmaster organizations can help with this, too.
  2. Test your audience before and after the material. The higher post-presentation score the more they learned. For this to be a good measure, it requires 2 tests with similar material. For example, if Mr. Berkholz was to apply this: he would ask about keywords, behavior etc in a multiple choice form. This will not address issues with social cues, but it will give an overall indication on how effective the presentation was.
  3. Give out a general survey that must be filled out at the end. This works well for a large conference with lots of speakers. Ask questions such as “The speaker appears to be an authority on the subject [Strongly disagree, disagree, neutral, agree, to strongly agree]” or “The subject material is interesting …”
  4. Ask for someone’s opinion that is outside the industry the content fits into. For example in Donnie’s case, ask a psychologist to be your practice audience member.
  5. Involve audience participation throughout the entire presentation. I love this piece of advice. It turns a simple, and short, presentation into a full-length lecture. Also, it helps to understand the audience’s interest.
  6. Practice your presentation beforehand – a lot.
  7. Review your slides before hand and prepare secondary screens. Fumbling around with unnecessary external programs during the presentation irritates your audience.

A Few Signs That Your Project May Be In Some Serious Trouble

  1. Lack of leadership in developer operations
  2. A lack of reporting of improvements in code reuse, coverage, test cases, and stability.
  3. Underutilization of frameworks and libraries used within the project.
  4. Lack of disposable runtime environments [for development and testing].
  5. Build times are unknown.
  6. Long and detailed documentation is required to build your product.
  7. Dead code is left in the code base to rot for years.
  8. Bugs are being reproduced as unit tests.
  9. Third Party dependencies are not being upgraded.
  10. Code is badly organized. Models are placed anywhere, packages aren’t organized, etc.

Make Mobile Phone Unlocking Legal Again

Recently, an exemption from the DMCA that allows for mobile phone unlocking was removed. Now anyone who unlocks a mobile phone is participating in an “illegal act.” That’s right, a device that you may have paid for, or have over paid [if you've had the phone long enough, and bought it under a carrier subsidy] has legal protections to prevent the owner from messing about with it. Given this reversal, the government is assisting in the creation of a monopoly that only benefits the mobile phone carriers.

What can you do as a US citizen? Well not much really, but there is a direct petition to Obama. Let the president know that you ask for the freedoms that are granted by many, other nations in the world.

The petition is currently at signature 64k out of 100k needed.

Features I’d like to see Added in Wikis

For the last decade, wikis have not changed very much. Even minor features such as AJAX support are still uncommon items. The following is a list of features I’d like to see added. A few of these items are available as plugins, however I am referring to having these features baked into the actual product.

Live Collaborative Editing

If you use Google Documents with others you will notice this: live collaborative editing. Usually the first time that someone notices this it either freaks him out, or just blows his mind. Multiple users can edit the same document at the same time, whilst receiving the changes in real-time. Having this support on a wiki would make the page lock / change conflict problem go away.

Importing Data Framework

It would be immensely helpful to have some sort of feature within a wiki to import data from other sources: images, RSS feeds, CSV feeds, etc. With a uniform way of bringing-in data, plugins could become a bit more generic and support the transformation. For example: let’s say that you have a build system, and it produces a build log file. Wouldn’t it be helpful for having that file be placed on the wiki [within a certain section] where it could be commented on? With a data framework, there could even be a plugin that could grep the output and only show the important sections.

Graphing Support

Charts are important for simple visualizations of data. Why this requires selecting and learning how to use a new plugin is beyond me.

Drawing

Wikis seem to be text based only. I have only found a small handful of plugins that support the editing of pictures. Even fewer use SVG. I’d like to see the ability to edit an SVG picture built into the wiki software.

OpenID

Why wiki software continues to roll their own authentication system by default is beyond me. This item seems like a no brainer. Create an OpenID authentication mechanism that uses the top providers [Yahoo, Google, Facebook]. If need be, revert to a local authentication method if there is a lack of internet access – or if the wiki is being deployed exclusively internally.

APIs for Dealing with Content On The Wiki

Lastly but not the least important, create and promote a uniform wiki API. This would allow for other systems to automatically push content onto the wiki, or pull it. This would be great for a monitoring system to:

  • create a new page on the wiki
  • post configuration details and current state
  • maybe even show statistics

Also with the API, the same monitoring system could grab a wiki page and check for changes in the configuration details. Granted, there are potential issues with the configuration details changing on a wiki, however at the moment this is more of an idea rather than a real world implementation.

Another example: WordPress could use wiki support to have multiple editors collaborate over a post within a wiki Page. WordPress could also, with an API, pull the wiki page to make it a blog post.

In Support Of Maven

In the last few days there has been an article completely bashing Maven on hacker news. I found this a little aggravating. Much of the article spent time complaining about how the files are structured, and how much effort it takes to maintain a Maven file. Also, the article complained about the plug-in structure.

To some extent I can agree with the original author. The plug-in system makes Maven a little difficult to learn and get completely right. On the other hand, the plug-in system makes it easy to deliver a single meta-build system that can easily adapt to what you need it to do. Building a Java web app? It has a plug-in to build and package it for you.

My main beef with the article is that it completely ignores why we got Maven in the first place. It builds, packages, and manages your dependencies better than ANT does. Before, you had to manually acquire, and grab your dependencies. If you had ANT or make, then you had to include the declarations for the dependencies in the build file, and put the dependency in your project. This is a pain for those that are using source control, and for setting up new developer machines. However, with Maven, just declare the dependency and the scope in the build file and you’re done. If you’re using an IDE it’ll bring in the references and may be able to pull the Javadoc if it’s available. Additionally, any new upgrades to the dependencies could be added just by changing the version number. Imagine doing that without a Maven like build system. Maven can even go the extra mile and create a redistributable package [this is a little tricky, but you can do it], deploy your new package to a repository, check in your code for you, or even deploy it to a webserver. For example, if you have a web service and don’t have Tomcat7 downloaded, run it with an embedded instance with mvn tomcat7:run . You’re done, Maven grabs Tomcat7, its dependences and tries to deploy your webapp to the new instance of Tomcat7. No installation of the server required.

In closing, Maven is a build tool. Unless you’re making project structure changes you shouldn’t be messing about with the way it builds things.

Rant on Web Interfaces: Quick Context Menus

For any of those that have seen one of my highest voted answers, they could conclude that I’m largely in favor of web applications. However, that’s not entirely the case. Many technical journalists, venture capitalists, and startup executives would have you to believe that desktop applications are no longer relevant. To put it simply, that is what they used to say. The “replacement” for desktop applications are mobile applications on a tablet/mobile and a web application. It’s lunacy to make these claims, but they remain unquestioned when someone smug makes them.

There are distinct advantages of having a desktop application. Many of the reasons – I won’t mention or address all of them here – are offline support, OS integration, local computation, tolerance against servers being down, and lower latency. However, imagine if your file manager became web based. You’d pretty much lose the support for contextual menus, or at least until it became a big enough priority for the organization running the site to add it. In the web-based file manager, to email a file, you’d have to open up the file [say a document] and go to file send every time you wanted to email a file. Let’s say you wanted to send the document to be printed at Kinko’s/FedEx: Just hope the provider of the file browser offered that support. What I’m complaining about is the lack of right-click functionality on objects you want to manipulate on the web.

Most applications do this wrong. They tend to list all of the objects [mail, messages, timesheets, etc] you would like to manipulate and then crowd the space with the same repetitive actions on each line (Edit, Delete, etc) Let’s take the example of Gmail: by right-clicking on a message, you don’t get the same options as you do in Outlook. There is no contextual support, you’ll see your standard web browser “contextual menu” (Back, reload, save as, Print [the web page], View Source….) With Outlook you’ll be provided the following options: Open, Print (the message),  Follow up, Reply, Reply All, Forward, Create Rule, Send to Evernote, etc. Imagine how much faster an experienced user would be if that functionality was exposed from the Inbox.

Imagine that you were able to perform a search and then able to perform a right-click action. You’d be given the option to Share, Remove from your search, save the link to some external site, etc. Hotel search sites should give you an option to right click on the hotel and give the option to search nearby, or save to a list elsewhere. Saving to a list for later would be helpful when you are comparing hotels and rates between two locations that are far apart.

Weirdly enough, Google Documents does a good job with their contextual menus. Within a document, right clicking gives you a simplified menu that you’d see in the equivalent desktop application. Even going further, it gives you the ability to “research” the selected text, with the option of Google, Google Scholar, and within your own Google Docs. That’s awesome. In the document view it gives you the options that you’d see in most file managers [Open, Move, change metadata, Delete, etc]. The web client on Dropbox also does a good job about this.
Not all web applications fail to provide menus, some applications do a good job, but they tend to be incredibly rare to see.

Some websites that could benefit from contextual menus:

  • News articles: (Right click for the printable page, sharing highlighted bits, or to qoute in the comments)
  • Most websites that allow you to save an object (individual item to buy, compare etc): Right click to save, or remove the item from the list
  • User generated content sites – Report, ignore [user], reply, and share [to other sites]
  • Pages that display an order confirmation: Bring up the carrier’s tracking page, printable invoice

Interactive Customer Service: How to fix Airlines’ Broken Phone Service

Ever had to change a complex literary or rebook a flight via the phone? If you have, then you can relate to how painful that is. If you don’t already have status with the airline, then the process is even more painful with a longer wait prior to interacting with the reservation agent.

When you tell a reservations agent where and when you’d like to visit a location, and how you’d like to end the trip, they have a very complex task to perform. They must put together an itinerary that fits your requests – and is available. After finding that information, they then must read it back to you over the phone. Each literary includes a lot of details – times and information about the flights [connection time, class, connection location, etc.]. Most of the time, you are only told the first flight that fits the parameters, which is rarely ever the best flight available. You’re rarely ever told your other options [unless you request the specific flight numbers and know the availability], because the agent is not motivated to give you all of the available options at once.

I believe the way that one could solve this problem is to convert this conversation from just auditory into a visual and audio experience. I believe that the creation of a small website that represents the session between the customer and the reservations agent, similar to a WebEx meeting, would solve the issue. The page would display all of the options available. It would make users a lot happier about their experience with airlines, and give the flyer more information on how tight or open the availability may be [alleviating much of the pain of irregular operations].

How would this work? The user could open up a web page, and use a short code that is shared between the agent and themselves to access the information being described, the page would be updated based on the agent’s action. This may even work at customer service desks where their reservation desks have to read itineraries to passengers.

How does this differ from the current procedure of online flight changes? The functionality of the flight changes aren’t always allowed or functional on the site. Try changing a round trip ticket to a different date and different location. When the, allowed, functionality of the reservation change site is exceeded, the user is prompted to make the changes over the phone.

Related Posts Plugin for WordPress, Blogger...
Better Tag Cloud