Learning Software Development Skills

In this post, I will try to answer some common questions from folks that are starting to learn programming. To let you know where I’m coming from, I’ve been doing software development and IT work since 2006 after graduating with a degree in Computer Science. The languages that I use most at work these days are C# and JavaScript for web development, but I am also familiar with C++ (my first language), Java, Go, and PHP. With that in mind, let’s get started with some questions.

What do I need to start programming?

This is one question that sounds simple on the surface, but it’s one that brings a multitude of different answers and probably more questions as you dig deeper. Really, the only thing that you need to start programming today is a strong desire to learn about computers and how they tick. Of course a computer is helpful, but you no longer need a high-powered workstation to with learning most computer languages these days.

An aside: The biggest piece of advice that I can give is to make sure that you are getting into the field because you genuinely love working with computers and technology. Don’t get into the field only because you want to make money. While it is definitely possible to make money in the field, having that as your primary motivation will probably bring more misery than anything else.

What Programming Language should I Learn?

In the long-term, I’d tell you that learning the techniques and theory behind software development are more important than picking a specific language to stick with for your entire career. If you have a firm grasp on those base techniques, then it should be relatively easy to learn a new language as you gain that experience.

In the short-term, you’ll have to pick one or more languages to get started with. There are a lot of “robust discussions” about which languages are best to start with, but I will give my opinions here:

C++ – I started with this language, and I think that it’s a great language to learn about functions, pointers, classes, and other object-oriented language techniques. Be prepared for a steeper learning curve than a language like Python, but C++ is lean enough to run high performance applications (games for one).

JavaScript – If you want to get into front-end web programming, then JavaScript is a good place to start your journey. If you find a web page that does AJAX calls or client-side form validation, it will be running JavaScript.

C#/Java – These languages build on the concepts of C/C++, but also provide very high level libraries for performing functions like string manipulation, cryptography, network access, and many more. With Microsoft recently open-sourcing the .NET platform and creating a free community version of Visual Studio, I personally like C# over Java. However, if you’d really like to get into Android application development, then Java may be a better choice. Google also makes heavy use of Java for their server apps.

Python – I’d be doing you a disservice if I didn’t mention Python as good starter language. Often used for scripting, the language can teach you many of the concepts mentioned above. The syntax is not a C-style syntax, so you will need to learn those differences if moving to another language in the future (brackets vs indentation for one).

OK, What Software do I Need?

Notepad, done.

No, the answer really isn’t that simple, and it depends on which language you are going for. At the very least, you’ll want a good text editor like Notepad++, Komodo Edit, or Sublime to edit your code files. If you are a Linux command-line guru, or don’t mind a steeper learning curve, then you can give vi or Emacs a try as well. As you move to bigger projects, you may find that you want a full environment, called an integrated development environment (IDE), to help manage your projects.

My favorite IDE is Visual Studio, which can be used to develop C++, C#, HTML/CSS/JavaScript applications right out of the box. I have linked the free Community Edition above. Other IDEs include Eclipse (Java, also highly customizable), Android Studio (for Android apps), and PhpStorm (for PHP).

Now that I have the tools I need, where do I start learning?

There are many free resources available online that just weren’t around when I started learning software development (get off my lawn?). One incredible resource that has sprung up over the last few years is Code.org. They have a wide variety of tutorials that covers all age ranges. They also have resources that help guide you to the many other classes that are out there. I have listed a few other resources below that may help on your quest:

CodeAcademy – Their free interactive tutorials provide a good way to learn web programming basics. The best part is that everything is browser contained, so you won’t have to run out and install a text editor or IDE right away.

Free University Podcasts – If you’d like to see how a university approaches Computer Science classes, check out these podcasts from Harvard, MIT, and Stanford. This isn’t an exhaustive list, but should be a good place to get started.

Stack Overflow – Once you get started with software development, you will undoubtedly have questions.  This is still my go-to site for all questions, basic and advanced.

What next?

Go forth and program! Feel free to ask any questions below, I’ll be glad to answer them.

Thoughts on Engadget Expand New York

I had the opportunity to attend the first Engadget Expand conference here in New York City this past weekend.  Overall, I really enjoyed myself and thought that the price of admission was well worth it for the panel sessions alone.  Here’s the breakdown, both good and bad, from the weekend.

The Good

  • Good panel discussions.  I found the panel discussions engaging and informative. My favorite discussion of the day was from LeVar Burton, host of Reading Rainbow and Geordi LaForge from Star Trek: TNG. The migration of Reading Rainbow from TV to tablet is a great idea in my opinion, and the fact that he is so passionate about using technology to improve education is something we need more of these days.
  • Reggie Watts is a genius.  He uses a mix of effects boards and synths in his one-man comedy/music shows. I’m not exaggerating when I say that he has one of the best singing voices I’ve ever heard live. It doesn’t hurt to be hilarious too.
  • InsertCoin Competition. There were a lot of great submissions for this competition, ranging from high resolution scanning all the way to portable vegetable growing. My favorite project of InsertCoin was the GrowCube, an aeroponic plant growth system targeted towards urban settings. A close second for me was the high resolution scanner from the folks at BlinkScan. Their scanner/software combination produces excellent images as well as automatic background removal for non-uniform objects such as combs. Both of these projects have crowdfunding initiatives starting up soon, so that should give a good indicator of how well they will do in the marketplace. Check out Engadget for more information on all the Insert Coin entries.
  • The Expo Floor. There were many good products out on the floor. The products covered a wide range of consumer electronics categories, including 4K displays (the price can’t drop soon enough on these), smart power outlets, and headphones. There is something fun about seeing a wide range of technology in one place, and meeting the designers for a few of the products is something that can be a rare event. I don’t always like the sales feel of some of the booths on expo floors, but you come to expect it at any of these events.
  • Lenovo Yoga 10″ Tablet. I was lucky enough to win one of these tablets on day one of the event, and I did have some time to test out the device after the event.  The kickstand on the device is designed very well, and is probably the highlight of the device. The screen, while only being 1280 x 800, looks pretty good in my opinion and is well suiting for showing off photos that I’ve backed up to Google+. Otherwise, the specs themselves are pretty mid-range, and I do not particularly like the skin that Lenovo added to the tablet. (I prefer stock Android.) Overall, I plan on setting up the tablet as a photo frame in our living room (the great kickstand makes this very easy) as well as for portable gaming. In particular, Ticket to Ride should work very well on this tablet. (Update: Ticket to ride did not work on the Lenovo tablet, perhaps due to a graphical issue.  As soon as I tried to start a game, the board would just not appear and the app would hang.)

The Bad

  • Session Scheduling.  The session schedule was more of a suggestion than a rule at some points during the event.  I would have liked to see longer sessions built into the schedule for some of the more popular panels.

Password Security and Two-Factor Authentication

This month has been a fairly busy month in the area of password security, especially with news of improved password cracking techniques and the social engineering attack on Mat Honan’s accounts.  To help you defend yourself against these attacks, I’ve included some of my favorite posts detailing what you can do to protect your online accounts.

Security Now Episode 366 – Security Now is a great podcast, and always has some great information on tech security in general.  In this episode, Steve and Leo talk about how “clever” password techniques really don’t work any more.

Sites that use Two-Factor Authentication – Lifehacker provides a great list of sites that allow you to use Google Authenticator or your mobile phone to receive one-time codes when logging into sites from a computer or mobile device.  Two-factor authentication is a method of adding “something you have” (your phone), to “something you know” (your password) to provide a layered method to logging in to your accounts.

GRC Haystack Tool – This page does a great job of showing how well your password stacks up against large password cracking arrays.  It’s important to note that the conclusion reached here is that a longer password is better than a short “clever” password. (See Security Now link above.)

Best Password Managers – Gizmodo covers their favorite password managers here.  Using a password manager allows you to generate a random long password for every site that you visit.  This limits the impact of individual site hacks to your password to only the attacked site.  Combined with two-factor authentication, this is a pretty secure combination in my opinion.  I use Keepass personally, with a keyfile and long master password, to keep my passwords secured.  It is imperative that you select a long master password if you are using one of these managers.

Have any questions or suggestions?  Feel free to leave a comment below.

MS-CHAPv2 Cracked Wide Open

Last month, Moxie Marlinspike and David Hulton announced an attack on MS-CHAPv2, which is used in PPTP VPNs and WPA2 Enterprise implementations. I’ve embedded the latest episode of the TWiT Security Now podcast below, because I feel that they do a great job of explaining the attack and the alternatives.

In short, it may be time to look at other options (like OpenVPN, an IPSEC-based tunnel, or an SSL VPN) if you are still relying on PPTP with MS-CHAPv2.

Security Now – Episode 366: