It’s no secret that people in the IT and software engineering fields are in high demand. We’re willing to take a nebulous idea and transform it into something concrete, as well as interface with our client to add new features. It’s no easy task, but we must be incredibly skilled in order to ensure that the general ideas of our clients become specific features in our applications.
As a beginning developer, the most powerful languages you can learn are C, C++, PHP, Java, and VB.NET (I know this one is a pain-in-the-ass but it ties into ASP.NET nicely for web applications). If you can get yourself squared-away with IIS (Internet Information Services by Microsoft) or Apache Web Server you’re pretty much all set when it comes to web technologies. In addition, PHP can pair nicely with Apache and VB.NET/ASP.NET can pair nicely with IIS.
As a developer myself I know the technologies enough to realize when someone has a decent skillset outside of what they specify on their resume. As both a hiring individual and one who performs the work myself, I have a unique perspective on the kinds of abilities that are required in order to succeed.
What’s the best route to go for web developers?
When I’m hiring for web developers I tend to look for people who are familiar with four components of the LAMP stack. The break-down is as follows:
- L: Linux
- A: Apache Web Server (httpd)
- M: MySQL
- P: PHP or Perl (preferably PHP, though)
I generally tell the new developers to learn PHP and how it can interface with MySQL as a beginning step. This kind of relationship comprises the majority of the web applications that a programmer will write and it’s a good idea to learn how these things interact at the database-connector interface level. You’ll probably never use it at that point but you’ll understand why things work the way they do.
I generally give bonus points for knowing PHP frameworks such as Laravel, CakePHP, or CodeIgniter since it shows experience with industry standards.
What’s the best route to go for application developers?
When I’m hiring for application developers I tend to look for a proven skillset with desktop and server-side applications. These can usually be broken down into the following:
- C, C++, or Java (some kind of application-specific language)
- Ability to tie-in to a database connection (JDBC through Java, for example)
- Understanding of how client-server applications communicate through a socket interface
- Creation of user interfaces
- Existing framework knowledge (possibly wxWidgets for C and C++, Spring Framework for Java)
- If you’re into building games you can get into the LWJGL (Lightweight Java Game Library) for Java
I’m a bit harder on desktop application developers than I am on web developers since there are more things they need to take into account to be sure they don’t completely destroy the end-user’s system. With Java this isn’t such a problem, but C and C++ will allow you to write to any memory address you specify, so you have to take special care to ensure you don’t screw-up something unintentionally.
My proof here is anecdotal. Many years ago I was working on a C++ program and I accidentally wrote to the wrong memory address in my application. Oddly, that address corresponded to something my video card had reserved for its usage. My computer tower began to emit smoke and my monitor blacked-out. C and C++ offer zero memory protection, whereas Java will attempt to prevent you from doing something that boneheaded. Make sure you learn Java first to get the mechanics and style of the language before moving on to languages that can actually damage your system if you make a critical mistake.
Experience over Education
The single thing that completely blows my boss’s mind and generally gets me into some degree of trouble with Human Resources regarding job candidates is my strict adherence to the notion of “A college degree is meaningless.”
In the eyes of most hiring committees, a degree is the equivalent of feasting on ambrosia and sitting next to Zeus on Mount Olympus. In tech and especially software development we take a significantly different stance: proven experience doing what we need is much better than merely knowing about it or practicing it at an academic level. This isn’t the case for all committees, mind you, but anyone worth their salt who hires developers will take the same approach. Why? We want to make sure the work can be performed; merely sitting in a classroom for four or five years listening to some professor drone on about systems that haven’t been relevant for the last twenty years doesn’t tell us anything about your ability.
I’d gladly hire someone with only a high school education who has years of development experience related to what I need over a recent graduate from Harvard or MIT whose only work shown on his resume is some bullshit internship or a minimum-wage job at Starbucks. I was actually working as a developer while I was going to college and had already amassed years of experience even before then because I took initiative and wanted to learn.
Admittedly, though, some places require that Bachelor’s of Science piece of paper that doesn’t say anything about your qualifications. If you find yourself wanting to get both a theoretical and practical knowledge about software engineering at the same time, your best bet is to find a college that offers a Bachelor’s of Science in either Informatics or Software Engineering. Learn on your own and expand outside of your classes too, since what you’ll learn in class barely scratches the surface of what you’ll be asked to make in the “real world” of programming.
You’ll want to stay away from a Computer Science degree, oddly enough, since it strays too far from the coding side and goes very in-depth on the hardware, operating system mechanics, and generally how a computer works. I know I don’t care about logic gates or the op-codes for an IA-32 chipset and neither should you. You shouldn’t have to worry about any of that since it won’t matter to you (or your boss) when you’re coding.
Visiting a place like Fry’s Electronics a few times a month is a good way to find new books and stay current with your development skills. Technology is an ever-changing field and you’ll want to stay as close to the curve as possible. The best place to keep up-to-date is in the books section at Fry’s; go through their books (especially the “Black Book,” “Bible,” or “For Dummies” series) and see what interests you. It’s considerably easier to figure out what catches your eye here than it is when you’re struggling to think of search terms on Google. If you don’t feel like buying a book and having a hard copy, then just note what the subject matter is and go find it on the Internet later.
This is of course the most difficult part of breaking into this field. When you’re just starting-out you’ll need to focus on cultivating your skills and creating small applications that demonstrate basic knowledge of your chosen language. Once you’re confident in creating small applications you can move on to intermediate applications like basic games. Finally, you can move on to advanced and large-scale applications that may utilize databases, client-server communications, web services, and the like.
Once you hit the end of your intermediate level and possibly the beginning of your advanced level you can choose to start looking for freelance work, since your skills may not yet be good enough for full-time employment utilizing that technology. Freelance work is the next-best thing to full-time employment based on how it pays; you can also usually get away with a lot of screw-ups too. In addition, you can place these projects on your resume to demonstrate proven experience with what you know.
Finally, the best part is that you are more than welcome to drop a project and pursue other clients if you are having too much trouble or your client has been getting on your last nerve regularly; you can’t generally do that with a full-time job since it would reflect negatively on an entire company. With freelance development it happens all the time; just make sure you part ways professionally and move on to the next project.
If you decide to go the full-time employment route one of the best things you can tell a hiring committee is that you’re a quick learner. The next-best thing you can tell such a committee is that you can read formal documentation and API specifications. Of course, you shouldn’t say either of these things if they aren’t true (we can figure this out very quickly on-the-job) but these two abilities are highly sought-after in a budding developer.
The third-best skill in your repertoire should be your ability to talk to a client directly and figure out how to translate what he says into a formal specification for a system. The reason I mentioned Informatics and Software Engineering as desired degrees (if you choose to go that route) is that you gain an ability to do so implicitly during your time in the programs.
Taken in conjunction with your abilities as a programmer, the three aforementioned skills will absolutely set you ahead of most other candidates. The stereotype of the programmer with no personality is absolutely true; instead, be the guy I feel like I can go have a beer with after work.
Hawk’s Typical Day
After grabbing my morning coffee and flirting with the manager at the coffee place near my office I’m up at my desk checking my email. The other developer and I shoot the shit for a little bit as we settle in for our day. I answer a few emails from my clients and my boss, and then I’m off working on my latest project through my development environment.
I can’t stress this enough: don’t be the guy without a personality. Nobody likes having to put up with you during the day and you’ll be seen as the kind of person who can’t talk to anyone because “he’s just a programmer.” You have to make sure you jell with the rest of the team; once you’re in the team environment your personality is almost as important as your skills. You don’t have to be the clown of the office but at least make sure you can carry on a conversation while making eye-contact.
Throughout the day I meet with my clients, tell a few jokes with them (this helps inspire confidence and lets them see me as a regular guy instead of “that boring programmer”), and get their new specifications as the project gains momentum. Most of my day is spent writing code, but I’ve also made a group of non-technical friends at the office. We often have lunch together in order to relax for an hour and see each other as regular people.
The IT field centered around Software Engineering will always need people to fill the demands of its clients. The reward of being in such a field involves the satisfaction of knowing you took a difficult project from start to completion. In addition, you’re looking at a potentially large paycheck since writing code isn’t an easy thing to do; once you learn it, your potential to be in-demand by major companies skyrockets.
Read More: Now You Need Game To Get A Job