Category Archives: Learning

Why We Need More Complex Programming Languages (Yes, You Heard Me Right!)

My daughter is learning how to read right now.  As I was thinking about this blog post, I just walked past my wife and her working on some very basic reading skills.  It is quite a bit of work to teach her everything she needs to know to read and write the English language.

In fact, it will be years of hard work before she’ll actually be able to read and write with any measure of competence—at least by our adult standards.  We tend to take language for granted, but spoken and written languages are difficult—exceptionally difficult.

Even as an adult, writing this post is difficult.  The words don’t flow perfectly from my mind.  I strain to phrase things in the proper way and to use the proper punctuation.

But, even though it is difficult to learn a written language, we make sure our kids do it, because of the high value it gives them in life.  Without the skills to read and write a language, most children’s future would be rather bleak.

The more and more I thought about this idea, the more I realized how simple programming languages are compared to the complexity of an written or spoken language.

girl reading thumb Why We Need More Complex Programming Languages (Yes, You Heard Me Right!)

The argument for more complexity

The irony of me arguing for more complexity and not less doesn’t escape me, but even though I strive to make the complex simple, sometimes we do actually need to make things more complicated to achieve the best results possible.

I’ve thought about this for a long time and I believe this is the case with programming languages.  Let me explain.

Before I get into programming languages specifically, let’s start off by talking about human languages.

I speak and write English.  English is considered to be the language with the largest total vocabulary and also one of the most difficult languages to learn, because of the flexibility in the ways in which you can compose sentences with it.

It is very difficult to learn English.  I am fortunate that I am a native English speaker and grew up learning English, but for many non-native English speakers, the language continues to be a challenge—even years after they are “fluent” in the language.

There is a huge benefit though, to being fluent in the English language—expressiveness.  I don’t profess to be an expert in foreign languages—I only know a little bit of Spanish, Brazilian Portuguese and Japanese, myself—but, I do know that English is one of the most expressive languages in existence today.  If you want to say something in English, there is most likely a word for it.  If you want to convey a tone or feeling with the language—even a pace of dialog, like I just did now—you can do it in English.

As I said, I can’t speak for other languages.  But, having lived in Hawaii, I can tell you that Hawaiian is a very small language and it is difficult to express yourself in that language.  Sign language is another example of a very small language which is fairly easy to learn, but is limited in what it can convey and the way it can convey it.

I say all this to illustrate a simple point.  The larger the vocabulary of a language and the more grammatical rules, the more difficult it is to learn the language, but the greater power of expressiveness you have with that language.

Breaking things down even smaller

I promise I’ll get to programming languages in a little bit, but before I do, I want to talk about one more human language concept—alphabets or symbols.

The English alphabet has 26 letters in it.  These 26 letters represent most of the sounds we use to make up words.  26 letters is not a small number of characters, but it is not a large amount either.  It is a pretty easy task for most children to learn all the letters of the alphabet and the sounds they make.

The text you are reading right now is made up of these letters, but have you ever considered what would happen if we had more letters in the alphabet?  For example, suppose instead of 26 letters, there were 500 letters.  Suppose that we made actual symbols for “th”,”sh”,”oo” and so forth.  Suppose we made the word “the” into a symbol of its own.

alphabet thumb Why We Need More Complex Programming Languages (Yes, You Heard Me Right!)

If we added more letters to the alphabet, it would take you much longer to learn the alphabet, but once you learned it you could read and write much more efficiently.  (Although, I’d hate to see what the 500 letter keyboard would look like.)

My point is that we are trading some potential in the expressiveness we can pack into a limited number of symbols for some ease in learning a useful set of symbols.

As you were reading this, you might have thought that this is exactly what languages like Chinese and Japanese do—they use a large number of symbols instead of a small alphabet.  I don’t know enough about these languages to know the answer for sure, but I’d bet that it is much easier to read a Chinese or Japanese newspaper than it is to read an English one—or at least faster.

We could take the same exercise and apply it to the number system.  Instead of using base 10, or having 10 symbols in our number system, we could have 100 or even 1000.  It would take a long time to learn all our numbers, but we’d be able to perform mathematical operations much more efficiently.  (A smaller scale example of this would be memorizing your times tables up to 99 x 99.  Imagine what you could do with that power.)

What does all this have to do with programming languages?

You really are impatient aren’t you?  But, I suppose you are right.  I should be getting to my real point by now.

So, the reason why I brought up those two examples before talking about programming languages is because I wanted you to see that the vocabulary and grammar of a language greatly influence its expressiveness and the basic constructs of a written language, greatly influence its density; its ability to express things concisely.

Obviously, we can’t directly map human written languages to programming languages, but we can draw some pretty powerful parallels when thinking about language design.

I’ve often pondered the question of whether or not it is better to have a programming language that has many keywords or few keywords.  But, I realized today that was an over simplification of the issue.

Keywords alone don’t determine the expressiveness of a language.  I’d argue that the expressiveness of a language is determined by:

  • Number of keywords
  • Complexity of statements and constructs in the language
  • Size of the standard library

All of these things combined work together to make a language more expressive, but also more complicated.  If we crank up the dial on any one of these factors, we’ll be able to do more with the language with less code, but we’ll also increase the difficulty of learning the language and reading code written in that language.

Notice, I didn’t say in writing the language.  That is because—assuming you’ve mastered the language—the language actually becomes easier to write when it has more constructs.  If you’ve ever run across someone who is a master of Perl, you know this to be true.  I’ve seen some Perl masters that could write Perl faster than I thought possible, yet when they came back to their own code months later, even they couldn’t understand it.

Looking at some real examples

To make what I am saying a little more concrete, let’s look at a few examples.  I’ll start with C#, since it is a language I am very familiar with.  C# is a very expressive language.  It didn’t start out that way, but with all the keywords that have been added to the language and the massive size of the base class libraries, C# has become very, very large.

C# is an evolving language.  But, right now it has about 79 keywords.  (Feel free to correct me if I am wrong here.)  As far as languages go, this is pretty large.  In addition to just keywords, C# has some complex statements.  Lambda expressions and LINQ expressions immediately come to mind.  For someone learning C#, the task can be rather difficult, but the reward is that they can be pretty productive and write some fairly concise code.  (At least compared to a more verbose language like C or C++.)  Java, is pretty close in most of those regards as well.

But, take a language like Go.  Go is a language with only 25 keywords.  It makes up for this by having some fairly complex language constructs and having a pretty robust standard library.   When I first learned Go, it took me perhaps a week to feel like I had a pretty good grasp of the language.  But, it took much longer to learn how to use Go properly.  (And I still have plenty to learn.)

At the far end of the spectrum, we have languages like BASIC.  Different BASIC implementations have different keyword counts, but most of them are pretty low and the constructs of the language are very simple.  BASIC is a very easy language to learn.  But, because it is so easy to learn BASIC and BASIC is so simple, the average programmer quickly outgrows the capabilities of the language.  BASIC isn’t very expressive and it takes many more lines of code to write the same thing you could write in a few lines of C# or Go.

For a much more comprehensive overview of differences between programming languages, I’d recommend Programming Language Pragmatics.  It does into details about many different languages and the differences between them.

What more complex programming languages buy us

It feels really weird to be arguing for something to be more complex, since the mission of this blog is to make the complex simple, but in the case of programming languages, I think the tradeoff of increased complexity is worth the cost of extra learning time.

Consider how much more complicated the English language is than any programming language.  To be able to read the very words you are reading now, you have to understand a vocabulary of several thousand words, recognize most of those words on sight, and understand a very complicated set of mechanics which govern the grammar of the language.  There aren’t even concrete rules, much of what is “right” or “wrong” is based on context.

Yet, even with all this complexity, you are able to do it—our brains are amazing.

complex thumb Why We Need More Complex Programming Languages (Yes, You Heard Me Right!)

Now, imagine what would happen if we decided that English was too difficult of a language and that we needed to dumb it down.  What if we dropped the vocabulary down to say 200 words and we got rid of the complex rules.  What you would have is basically a Dr. Seuss book or some other early reader type of children’s book.  It would be very difficult for me to convey the kinds of thoughts I am conveying to you right now with those restrictions.

When you compare even the most complex programming language to the English language, it is no contest.  The English language is far more complex than any programming language we have ever conceived of.  I don’t know of a programming language that the average person couldn’t learn reasonably well in a year’s worth of time.  But, if you were to try and teach someone written English in a year—well, good luck to you.

If we created much more complex programming languages, we would have a much larger learning curve.  But, in exchange, we’d have a language—that once mastered—would allow us to express algorithmic intent at a level we can’t even imagine now.

Not only would we be able to express our intent more clearly and more concisely, but we’d also greatly reduce the total lines of code and potential for bugs in our software.  Less code equals less bugs.

The drawbacks

Now, I’m just playing around mentally here.  I “half” believe what I am saying, because I am just exploring ideas and possibilities.  But, even in this mental exercise of thinking about what would happen if we created programming languages as complex as written languages, I can’t ignore the drawbacks.

Obviously, the biggest drawback would be the learning curve required to learn how to program.  Learning how to program—at least how to do it well—is pretty difficult now.  I still think people make it more complicated than it needs to be, but software development is a much more difficult vocation to pick up than many other career choices.

If we created more complex programming languages, we’d have to count on many more years of learning before someone could even really write code or understand the code that is already written.  It might take 4 or 5 years just to understand and memorize enough of the language to be able to use it effectively.

We could of course combat this to some degree by starting beginners on easier languages and advancing them up the chain to more complex ones. (In fact, writing this article has convinced me that would be the best way to learn today.  We shouldn’t be starting developers with C# or Java, but instead should teach them very simple languages.)

We would probably also be forced down a smaller path of innovation, as far as programming languages go.  The world can support 100’s of simple programming languages, but it can’t easily support that many complex languages.  We might end up with one universal language that all programmers used.  A language of this size would be very unwieldy and hard to advance or change.  It would also take a massive effort to create it in the first place, since written languages developed naturally over hundreds of years.

That’s enough fun for now

After writing this article my brain is hurting.  I’ve been considering writing this post for awhile, but I wasn’t sure exactly where I stand on the issue.  To be completely honest with you, I still don’t.  I do think that more complex programming languages would offer us certain benefits that current programming languages do not, but I’m not sure if the drawbacks would be worth it in the end or even what a significantly more complex programming language would look like.

What about you, what do you think?  Am I just crazy?  Is there something significant I missed here?

Oh, and if you found this post interesting and want to hear more of my crazy thoughts about software development—and a few sane ones as well, sign up here and you’ll get a weekly roundup of my posts and some other content I only send out to subscribers.

How To Get a Jump Start In Your Programming Career

Getting started in the field of software development is difficult.

No doubt, if you are just starting out as a programmer, you have already experienced how difficult it can be to get a job without having much or any experience.

If you’ve been a software developer for any amount of time, you’ve probably experienced how difficult it can be to rise up the ranks in this highly competitive industry.

I’ve talked to many developers just starting out who are frustrated because they don’t know where they should be devoting their energies to best advance their careers and secure their futures.

There are so many options.  So many technologies you could learn.  So many paths you could take.  Which is the right one?

Thinking the right way from the start

I’ll give some concrete advice in a little bit, but before any of that advice is useful, it is important to make sure you are thinking about your career in the right way.

thinking thumb How To Get a Jump Start In Your Programming Career

It is really important to think about your career as a business.  A business you own which employs you.  Thinking this way will help you make the right objective decisions about what you should be doing with your time and how and when you should invest money in your career.

Too many software developers think about their career in terms of their current job or the job they seek to obtain—that kind of thinking is short sighted.

Have you ever noticed how it is easier to advise someone else on a decision than to make that same decision for yourself?  The reason is because when you advise someone else, you are able to be objective and not let fear and other emotions influence your advice.

By thinking of yourself as a business, you’ll be able to create that same kind of separation and objectiveness which will lead you to better decisions.

Actually start a business

In fact, why not go the extra step and start a business right from the start?

It is difficult to get experience without having experience.  Most software development jobs require you to already have experience.

So, how do new software developers or developers with limited experience actually get experience?

Often, you get a lucky break and perhaps you come into an organization in a QA position or other role and eventually work your way up to developer.

That is the long way.

Here is the short way.

Just start your own business from the get go and employ yourself.  It isn’t hard to start a business.  You don’t even have to file any paperwork to start out.  You can just do business as yourself in most places.

But what about work?  I need to actually make some money.

Ah, but the point of this starting out business is not to actually make money, but to gain you experience.  You can keep your current job and you can run this business on the side.  You just need some projects to work on so that you can put some real experience on your resume.

It is pretty unlikely that a prospective employer is going to ask how much money your business made last year, (even if they do, you don’t have to tell them.)  So, don’t worry about making money.  If you are able to get some paid jobs, great, but there is no reason you can’t do jobs for clients for free in order to gain experience.

Create a website for a friend or family member’s business.  Talk to local businesses and ask them if they’d like you to develop an application for them for free or very low cost.  It doesn’t matter where you get the business from, the point is to get something on your resume that is real work you did—then it isn’t lying.  You don’t want to lie on your resume.

Develop some mobile applications

Here is another great thing that your business can do that will not only get you some experience to put on your resume, but will also possibly generate you some extra income and give you something to show at a job interview.

I often recommend that developers just starting out build mobile applications, because mobile applications can be built by a single person and are a great way not only to learn how to build an application from end to end, but to create solid proof of your ability to write code.

One of the biggest fears that companies have when hiring developers is whether or not that developer can actually produce anything.  You can completely alleviate that fear if you can show the source code for an application you created yourself, and if you have it in a mobile app store and people are actually using it, even better.

mobile app thumb How To Get a Jump Start In Your Programming Career

If you are looking to find out where to get started with mobile application development, I have two Pluralsight courses on the subject: Introduction to Android and Beginning iOS 7 Development.  You can check those out or find a good book on the subject.

Here are a couple I’d recommend:

Besides gaining experience to put on a resume, building your own mobile application will help give you confidence in your ability to create real working code and it will help you to develop well rounded skills in software development.

Sure, it may be a bit difficult to get started and there is a decent amount to learn about mobile development, but it is a good investment regardless, because mobile devices aren’t going away anytime soon and the demand for developers that can develop for mobile platforms is only likely to increase over time.

Plan your career

I talk about the idea of marketing yourself as a software developer quite often, because it is something I truly believe can help software developers to get better jobs and earn higher incomes.

Much of this advice comes down to actually planning out your career rather than just looking for the next job.

You want to set yourself up early on in a position where you are building a brand and reputation for yourself that will benefit you later in your career.

A great way to do this is to create your own blog.  Don’t wait to do this until later on.  I wish I would have started this blog 5 years or more earlier in my career.  Every developer with a successful blog that I have talked to has said the same thing.

Don’t just create the blog, use it.  Strive to write an article each week.  Even if you don’t have anything interesting to say, do it.  After a few years, you’ll be a better writer, have a nice history of your thoughts and be all the better off for it.

I’m not going to go into all the details of marketing yourself in this post, but if you are interested, I do have a course that covers everything you need to know about marketing yourself as a software developer.

The key point here is to plan your career and think for the long term.  Create a blog, establish a brand, do other things that will benefit you years down the road, but start doing them now.

Find the right friends (mentors)

Having the right friends to ask advice from or to council you can save you a large amount of time and help put you on the right path.friends thumb1 How To Get a Jump Start In Your Programming Career

I’d advise you to make friends with experienced software developers and utilize the wisdom they can impart on you.

It can be difficult to make friends if you come off as needy.  It is unlikely that if you ask someone to be your mentor, they will accept.  Being someone’s mentor doesn’t really offer much to the person doing the mentoring.

The key is to have something to offer in return so that you are providing value as well.

Here are a few ideas to make some friends in the industry:

  • Offer to buy lunch.  This is a good opportunity to have a conversation with someone who you otherwise might not be able to.  Who doesn’t like a free lunch?
  • Start commenting on software developer’s blogs that you admire.  You’ll eventually gain their attention if you provide useful, insightful comments.
  • Find something to trade.  Do you have some knowledge in some other area that someone might be interested in?  Can you trade your knowledge of fitness or diet in exchange for information about software development?  The best relationships offer value to both parties.
  • Go to user groups.  There are many user groups all over the world that you can become a part of.  If you are a regular, you will meet other regulars and build good friendships.

Read the right books

One of the best ways to really get ahead of the curve is to read the right books.  Reading the right software development books can help you to understand concepts that take years to discover on your own and give you the benefits of the collective experience of many successful software developers.

Here is my personal list of books that I’d recommend all software developers start out with.

Code Complete – A classic book about the structure of code.  This will make you a much better programmer and help you write clear code.

Clean Code – A great book by Bob Martin that really distills down some key concepts about writing good code.  A must read book.

Design Patterns – Read through this book several times and learn these patterns.  It may take some time to grasp them all, but they will show up again and again in your career.

Programming Pearls – Work through the problems in this book.  They are hard, but the effort is worth it.

Agile Software Development, Principles, Patterns, and Practices – Another Bob Martin book, but also a must read.

Good luck.  I hope you found this advice useful.  Starting out is hard, but if you are smart about it and deliberate, you can boost yourself several years ahead of others in your same position.

If you found this post useful, don’t forget to sign up here to get more content like this delivered to your inbox.

How To Be A Better Software Developer This Year

It is easy to get stuck in mediocrity if you are not consciously trying to improve year after year.

We have to constantly be striving to improve our skills and talents, otherwise those abilities can go to waste and degenerate.

Likewise, just striving to “improve” is not good enough either.  We have to have a definite plan for improvement.

In this post, I’ve compiled a list of things you can do this year to improve your skills and make this your best year yet.

#1, Find your biggest weakness

I always try to look for low hanging fruit that I can grab easily when trying to improve anything.  Usually, there is some weakness that could easily be corrected which would provide a huge benefit to you, but you’ve just never got around to fixing it.

low hanging fruit thumb How To Be A Better Software Developer This Year

For example, when I first moved into my new house, my refrigerator was not holding the temperature correctly.  The fridge would drop down to a very cold temperature and freeze food pretty often.

This was pretty frustrating, but I tried to ignore the problem, because I was too busy.  I kept having to throw out frozen lettuce or other vegetables until one day I decided I had enough and set it on my mind that I would either fix the fridge myself or have it repaired.

It only took me a few hours total worth of work to figure out that a little flap that sent cold air from the freezer to the fridge was broken, and to fix that issue by ordering the right part.  The results were immediate and very gratifying.  By taking that little bit of time out of my week, I saved myself quite a bit of frustration in the future—not to mention saved myself money in both electricity costs and wasted food.

So, why did it take me so long to fix that fridge?

I was always too busy, and the problem never seemed urgent enough to warrant my attention.  (Plus, I didn’t know jack about fridges.)

When I take an inventory of my professional life, I find that I have many “broken fridges” all around my office.  Weaknesses or problems that I could very easily fix, but I’ve just been to busy to get around to it.

Perhaps you have the same problem?  Have you been struggling through using your IDE, because you didn’t take the afternoon to properly learn the keyboard shortcuts that would save you quite a bit of time?

Are you stumbling through some JavaScript library, because you didn’t spend the few hours worth of time it would take to really understand how it works and how to use it properly?

Perhaps you just haven’t taken the time to organize your computer or workflow, because it hasn’t been enough of a pain to be worth your time—even though you know that you are wasting a huge amount of time by being so unorganized?

Now is a good time to look for that low hanging fruit; the easy to fix weakness you can correct this year, which will pay back big dividends.

If you take the time to look around, I’m sure you’ll find a few.

#2 Learn something new

Because our field changes so rapidly, it is very important to be learning the next thing before you need to rely on the skills to use it.

It isn’t always possible to predict what the next thing will be, but getting into the practice of learning new things will expand your capacity to learn things quickly and give you a much wider perspective of the field in general.

One of the biggest expansions of my abilities as a software developer came when I took a consulting gig leading a team of Java developers after having spent years programming in C# and .NET.  I was very reluctant to take the position, because I felt that I would be progressing backwards instead of forwards, but I couldn’t have been more wrong.

I already knew some Java, but I hadn’t really studied the language and I didn’t know much about the environment and tools Java developers use.

This experience forced me to grow and really expanded my abilities, not just in Java, but in C# as well, because it forced me to look at things from a different perspective.

It is really easy to get stuck in a rut and stick with what we already know, but sometimes you can get a huge benefit by getting a bit out of your comfort zone and learning something completely new.

Try learning a new programming language this year or an entire new programming environment.  Try your hand at mobile development, if you’ve never done it before, or learn something else that will challenge you and expand your horizons.

#3 Make new friends

Every year I talk to hundreds of software developers through email or at conferences and code camps, but my software developer life wasn’t always so social.

I didn’t really see the point in reaching out and being part of the community; after all, I was a software developer, my job is to write code, isn’t it?

friends thumb How To Be A Better Software Developer This Year

But, all of us have very limited worlds, myself included. We need the experiences and influences of others to expand our viewpoints and see things that we don’t have the capabilities to see on our own.

Think about it this way.  How far would you have gotten in learning any pursuit if you were completely self-taught and couldn’t rely on any books, conversations, or search engines to expand your knowledge?  Probably not very far at all.

It is important to reach out and talk to other software developers—and not just your coworkers—so that you get a mixing of ideas and viewpoints which will force you to grow.

Doing this may be as simple as starting your own blog to share your experiences and interact with others who comment on or read your posts.

You can also join a user group or attend a code camp or conference, which will give you ample opportunities to meet new people and exchange ideas.

There is also a huge emotional reward in giving back.  If you have some experience that you can share with others, doing so is likely to make you feel really good about yourself and provide a benefit to someone who could use your help.

If you are feeling down in the dumps or depressed, one instant cure is to do something nice for someone else.  Is there a developer you know that could use your help?

#4 Set a course

If you don’t know where you are headed in your career, there is no better time to figure it out than now.

So many developers drift aimlessly through their careers without thinking about where they want to be and what they want to become.

It is not enough to say that you want to become a good software developer or programmer—you need to set a definite direction that you are progressing towards.

With a clear goal in mind, your mind will employ the power of your subconscious mind to help you achieve that goal.  Without one, you’ll just float adrift never reaching any real destination.

(By the way, this is one of the most powerful realizations you can discover in life.  Once you learn to harness the power of your subconscious mind, you’ll be amazed at what you can accomplish.  The book that explains it better than I can here, is Psycho-Cybernetics, I highly recommend it.  One of those “must read” books.)

This doesn’t mean you have to chart out your life and decide where you will be in 20 years, but it does mean that you should at least have a plan of what you intend to accomplish by the end of this year and at least have some kind of destination out a bit further than that.

It is really worth taking that time to sit down and think about what you want to accomplish.  Don’t even worry about how you will accomplish it. It is much more important to focus on the what.  The how will come automatically once you tackle the hard problem of what.

Make this your best year yet!

Hopefully this post gave you some ideas you can use to help you to move the ball forward this year and really move towards some clear and definite goals.

One of my goals this year is to finish building my course on How to Market Yourself as a Software Developer.  I plan to include topics like the one in this post to help you chart a definite plan to market your skills and really boost your career.

It is only available for limited pre-order now while I am getting together a group of early adopters that will help me shape the rest of this course, but if you want to know when it will be released or you are just interested in more posts and software developer career advice, like this one, sign up here and I’ll keep you updated.

What are you doing this year to become a better software developer?

What Programming Language Should I Learn?

I often get asked by beginner programmers what programming language they should learn.

This, of course, is a tough question to answer. There are so many different programming languages today that a new developer, or even a seasoned developer, wishing to retool his or her career, could learn.

I’ve actually tried to answer this question before in a YouTube video, but I want to revise and refine my answer a bit here, because some of my views have changed and I’d like to give a bit more detail as well.

112213 0123 WhatProgram1 What Programming Language Should I Learn?

The wrong question to begin with

It turns out that what programming language you choose to learn is not actually all that important

Things have changed quite a bit from back when I first started my career in software development. Back when I first started out, there were much fewer choices of programming languages and there were much fewer resources available for reference. As a result, the choice was much more important.

For example, I started out learning C and then C++. At that time, it took quite a bit of work to master the language itself and to understand all of the standard libraries that were available. A good C or C++ programmer back then had a very in-depth understanding of every nook and cranny of the language and they needed this knowledge, because of two main reasons.

  1. References were not as widely available, so figuring out a syntax or library available involved flipping through a huge book, rather than just typing some keywords into Google.
  2. Programming, in general, was done at a much lower level. There were far fewer libraries available to be able to work at higher levels, so we spent more time working with the language itself and less time working with APIs.

Contrast that with the programming environment of today, where not only is information widely available and can be accessed with ease, but also there are a large number of programming languages that we effectively use to program at a much higher level due to the vast amount of libraries and reusable components available to us today.

In today’s programming environment, you tend to not need to dive as deeply into a language to be effective with it. Sure, you can still become an expert in a particular programming language, and it is good to have some amount of depth in at least one language, but you can literally learn a new language in less than a week and be effective with it almost immediately.

Now, before your alarm bells go off and you write me off as crazy, let me explain that last sentence in a bit more detail.

What do you mean you can learn a programming language in a week?

What I mean by this is that once you understand the basic programming constructs available in just about all programming languages, things like conditionals, loops and how to use variables and methods, you can take that same knowledge to a different programming language and just learn how to do those same things in that language’s syntax. In fact, most IDEs today will even help you with the syntax part, making your job even easier.

If you are already fluent in multiple programming languages, you probably agree with what I am saying, but if you have only ever learned one programming language or none at all and are looking to learn your first programming language, you might be a little skeptical. But, take it from someone who has learned and taught programming languages which I have learned in a week, the basics are pretty much the same.

Check out this book which basically deals with this exact subject, Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages.

Now, if you are just starting out, it is pretty unlikely you’ll be able to learn a whole programming language in a week. This brings us to the question, you may be asking yourself…

So, what programming language should I learn then?

Hold up. I’m still not quite going to answer that question. Because, it still isn’t quite the right question.

Instead of getting hung up on what programming language you want to learn, you should instead ponder what you want to do.

Learning by doing is the most effective way to learn, especially if you are doing something you have an interest in or is fun to you.

So, I always start new want-to-be developer out by asking them what they want to build.

Do you want to build an Android application? How about an iOS application? A web page? A game?

First, figure out the answer to this question and then let that answer guide you to choose the technology and programming language you will use to achieve that goal.

Don’t worry so much about which programming language or technology is most valuable. You can’t make a wrong decision and regret it later, because it won’t take you much time to retool later if you need to. Once you have the basics down and have actually used a programming language to build something, you’ll find that doing it again will be much easier.

112213 0123 WhatProgram2 What Programming Language Should I Learn?

I like to encourage new developers to write a mobile application—especially an Android application.

Here are some reasons why:

  • A complete Android application can be built by a single person. Creating a complete application will really help you to feel confident about software development and is one of the best ways to really learn to code. I spent a good deal of my early career only being able to create bits and pieces of things, and it was frustrating, because I never knew if I could really “code.”
  • By learning Android, you learn Java and how to use libraries and APIs. This will give you a good programming language to start with and you’ll get some valuable experience with APIs.
  • Google gives you some free help and makes things pretty easy to learn. Since Google really wants you to create Android applications, they have put quite a bit of work into creating easy to use tools and tutorials to help you be successful quickly. (I’ve also created some tutorials, which you can watch at Pluralsight here as well.)
  • You can actually make money while learning and teach yourself a very valuable and upcoming skillset. Not only can you sell your Android application or monetize it in some other way, but you will be learning a complete set of software development skills for a platform that is in very high demand.

Aha! So Java it is then?

No, not exactly.

If you had to press me hard for a programming language suggestion for someone just starting out, I would actually suggest JavaScript.

It is no secret that I have a sort of love / hate relationship with JavaScript, but I would be a fool, and doing you a disservice, to tell you that it is not one of the most valuable programming languages to learn today.

JavaScript may not be the most pretty or elegant language, but it is everywhere and it appears that despite my best efforts to stop it, it will continue to grow and spread for at least quite some time.

If you learn JavaScript, you’ll be able to create applications in many different spaces. Mobile, web, and even robotics can be programmed using JavaScript. And, although I was quite skeptical at first, HTML5 game programming with JavaScript is actually quite good. I created a Pluralsight course on creating an HTML5 game using JavaScript, and I have to admit that I actually really enjoyed the experience.

Summing it up

So, just to be clear. My recommendation is that you focus on what you want to build and let that guide your technology choice, with a slight biased toward Android development, because of the reasons I outlined above. But, if you absolutely want to choose the most valuable programming language to learn, at least at the time of writing this post, it is definitely JavaScript. Like or hate it, it is used everywhere.

I’m actually working on some products to help developers manage their careers and lives better which will cover topics like this one a bit more in-depth. If you are interested in receiving some updates when I publish an interesting article or video, or when I launch some of those products, feel free to sign up here. Don’t worry, I won’t spam you. J

11 Influential Web Developers You Should Be Following

“There is no such thing as a ‘self-made’ man. We are made up of thousands of others. Everyone who has ever done a kind deed for us, or spoken one word of encouragement to us, has entered into the make-up of our character and of our thoughts, as well as our success.”

- George Matthew Adams

One major lesson I have learned in my career and in life in general is that if you want to be successful, find others who are already being successful at doing what you want to do, and do what they do.

I thought I’d share in this post some of the web developers, (although I hate to classify anyone so narrowly), that I follow and that have inspired me or provided me with great resources or advice.

Brad Frost

brad frost thumb 11 Influential Web Developers You Should Be Following

This guy just recently schooled me on responsive web design.  Best part is he did it in a way that made me actually feel smarter and not like I was stupid.  Hard to find someone so brilliant with so much tact.

If you want to know about responsive design, listen to Brad Frost.  He is laying out the future of responsive design and blazing trails in every direction.

I haven’t ever had the chance to hear Brad speak myself, but I hear that he is an excellent speaker as well.  I definitely plan to try to attend one of his sessions in the future.

Brad makes extremely compelling and convincing arguments about the things he believes in and it is really hard to argue with someone who checks all their facts and knows what they are talking about.

Brad has put together an excellent resource called This Is Responsive that contains lots of great information about responsive design.

Website: http://bradfrostweb.com/

Twitter: @brad_frost

Christian Heilmann

chrisheilmann280 thumb 11 Influential Web Developers You Should Be Following

Christian is the Principal Developer Evangelist of the Mozilla Developer Network.  I have to tell you, I really like this guy.  I’ve only had a couple of conversations with him on Twitter, but he seems to genuinely care about making the web a better place.

He is extremely well spoken and has an awesome German accent—oh, and he also knows what he is talking about.  He’s written many articles and blogs posts for Ajaxain, Smashingmag, Yahoo, Mozilla, ScriptJunkie and others.  And his Twitter stream is legendary.  If you want to know what is going on in the web world, check out his stream.

Website: http://christianheilmann.com/

Twitter: @codepo8

Books on Amazon

Dan Wahlin

DanHeadShotBlog thumb 11 Influential Web Developers You Should Be Following

Dan is a very experienced web developer that has kept up with the changing tides in web development.  He is the founder and owner of The Wahlin Group where he provides consulting and training on web technologies.

Lately Dan has been producing a huge amount of great content about Angular.js, including his very popular AngularJS Magazine on Flipboard.

Dan also is a Pluralsight author and has some very popular courses. (His latest is jQuery Tips and Tricks and I highly recommend it.)

Website: http://weblogs.asp.net/dwahlin/

Twitter: @DanWahlin

Books on Amazon

Elijah Manor

6b5037440980edbea493871fc133381e thumb 11 Influential Web Developers You Should Be Following

When it comes to JavaScript, it is pretty difficult to find someone more knowledgeable than Elijah.  Elijah breathes JSON.

One of the main reasons I like Elijah though, is because of his ability to take complex, and sometimes boring topics, and make them interesting and simple.  For example, he did an excellent series which he called “The Angry Birds of JavaScript” which I found really entertaining as well as useful.

Elijah is a trainer, speaker and also a fellow Pluralsight author. (You should check out his latest course: Fixing Common JavaScript Bugs.)

Website: http://www.elijahmanor.com/

Twitter: @elijahmanor

Glenn Block

WP 000784 thumb 11 Influential Web Developers You Should Be Following

Glenn is another one of those developers who seems to have a contagious passion for development that you can’t help but catch.  Glenn is always doing something cool that I want to learn about.  He was involved in all kinds of cool things at Microsoft like Web API, Azure and MEF.

Glenn Block, until recently, had been a PM at Microsoft, working on—you’ll never guess it—that’s right, node.js.  How cool is that?  He was one of the main guys to bring node.js on Windows to Azure.  I like how Glenn is able to combine these two separate worlds and make them make sense.  I consider Glenn to be very pragmatic.

Glenn is now working for Splunk, and I am sure he’ll do amazing things there as well.

Oh, and I almost forgot.  Glenn actually combined C# with node.js and birthed scriptcs, a way to write C# code without compiling.  Pretty cool stuff.

Website: http://codebetter.com/glennblock/

Twitter: @gblock

Books on Amazon

John Papa

JPBW 150x150 thumb 11 Influential Web Developers You Should Be Following

John is an awesome developer and an awesome guy.  He used to be a technical evangelist for Microsoft on Silverlight and much of his training and guidance was on using Silverlight.

But, after Silverlight… died, John found a way to reinvent himself and now is highly respected as an expert on SPA or Single Page Applications.  He is an amazing and inspiring example of how a person can redirect their career and use their existing strengths and knowledge to go in a different direction when needed.

John also is one of the most talented technical speakers that I have ever heard.  He speaks at conferences all over the world and even used to host the Silverlight TV show on Channel 9.

He’ll be speaking at DevIntersection in October in Las Vegas and Visual Studio Live! in November in Orlando, so if you get a chance, I’d highly recommend attending one of his sessions.

I’ve had the opportunity to meet John in person at the Orlando Code Camp and even interviewed him on an episode of my Get Up and CODE podcast, and I can tell you he is a genuinely nice and kind person as well.

He also happens to be a fellow Pluralsight author. (Check out his latest course Essential Knockout and JavaScript Tips.)

Website: http://www.johnpapa.net/

Twitter: @John_Papa

Books On Amazon

Kelly Sommers

b81b99287e78b1cd6cbd0e5cbfb3295c thumb 11 Influential Web Developers You Should Be Following

I like Kelly because she is transparent and passionate about development.  It is rare to find anyone who is so excited about technology and learning.

Both her blog and Twitter stream are constantly filled with valuable information.  Some of the things she talks about and writes about make my brain hurt.  For example, she wanted to learn about how to write very high performance code, so what did she do?  Oh, just learned C and wrote her own HTTP server called Haywire.

Many developers are ok with surface level answers to questions, but not Kelly, she keeps digging and digging until she finds a real answer that makes sense.  If you want to learn how to learn, follow Kelly. (Plus, you have to love the name of her domain.)

Website: http://kellabyte.com/

Twitter: @kellabyte

Paul Irish

avatar150 thumb 11 Influential Web Developers You Should Be Following

Paul is a very, very busy man.  He is involved in many web technologies like Modernizr, Yeoman, and HTML5 Boilerplate.  He is currently a developer advocate for Google Chrome.

Paul has had a huge impact on the modern web and although his blog isn’t updated all that often lately, it contains a huge amount of in-depth information about browsers and browser technology.  I turn to Paul when I want to understand the deep questions of the web.

What I like about Paul is that sheet volume of code that he has written.  He doesn’t just talk about technologies, he makes technologies.

Website: http://www.paulirish.com/

Twitter: @paul_irish

Rob Eisenberg

Rob1 thumb 11 Influential Web Developers You Should Be Following

Rob is an expert at looking at patterns and building frameworks out of them.  Rob has developed a framework called Caliburn.Micro which makes WPF, Silverlight, WinRT and WP7 development much easier.  Along the same lines, he created another framework called Durandal which helps take the pain out of JavaScript web development.

Rob figures out ways to simplify complex things, which of course is something I really like.  He owns a consulting company called Blue Spire and he speaks at many events and writes articles regularly at devlicio.us.

Website: http://robeisenberg.com/

Twitter: @EisenbergEffect

Books on Amazon

Scott Hanselman

headshot2 thumb 11 Influential Web Developers You Should Be Following

I’m going to go out on a limb here and assume you’ve already heard of Scott Hanselman—it is hard to be involved in web development and not have heard of him.

Scott has this natural talent of cutting through the BS that is out there in the tech world and getting to the heart of the matter.  He posts many things about the web and web development that other people are afraid to say or ask.

Scott also is the host of 3, that’s right, 3 podcasts.  I’ve been listening to Hanselminutes for a long time and I’ve even had the honor of being on the show a few times.

He is also a very talented public speaker known for meticulously preparing every detail of his presentations and rehearsing them to a diamond-like polish.

One thing I really like about Scott is that he seems to reflect the interests of most software developers and technologists.  His posts on all kinds of technical topics interesting to developers, not just web development and programming.  Scott is diverse.

Website: http://www.hanselman.com/

Twitter: @shanselman

Books On Amazon

Troy Hunt

Photo thumb 11 Influential Web Developers You Should Be FollowingThere is only one word for Troy… scary.  This dude scares the hell out of me—routinely.  Just when you thought your website was secure, here comes Troy showing you why it’s not.

Troy is the person I trust more than anyone else to tell me what I need to know about security in today’s web world.  Sure, everyone knows about SQL injection and salting passwords, but Troy’s knowledge goes far, far beyond that.  Troy routinely finds big security vulnerabilities in production websites and posts about them.

If you are doing web development and you don’t want to get hacked, you better pay attention to what Troy says.  His tweets and blog posts are like the bitter pill that you need to swallow if you want to live.  Oh, and he is a pretty nice guy as well.

Also, a Pluralsight author with some excellent courses on security.

Website: http://www.troyhunt.com/

Twitter: @troyhunt

That’s my list, what is yours?

Obviously I can’t list every single influential person in web development that I rely on for advice and wisdom, but this is a pretty good list of some of the people I have found most helpful.

Getting good advice and mentorship is really important to advancing your career.  I’m actually putting together a package of all my advice on career development that I have learned over the years, in a product that I’ll be launching sometime next year.

The project itself is still a bit secret, but sign up here if you are interested and I’ll be sure to let you know the moment it becomes available.

What about you?  Who is your list of top resources for web development?  Leave a comment and let me know.  Also, if one of the developers I mentioned above has helped you, leave them some love in a comment.

My Secret Non-Software Developer Life I’ve Never Told You About

I’m not a secret agent.

I don’t work for the NSA.

I don’t parade around at night dressed in women’s clothes.

My little secret isn’t all that impressive, but it is something that I don’t think I have ever mentioned on this blog.

I am a real estate investor.

real estate investor thumb My Secret Non Software Developer Life I’ve Never Told You About

It isn’t really that big of a secret, but it is something I haven’t really felt the need to talk about here, because I didn’t think it related very much to software development.

I am beginning to change my mind though…

Software developers need to know how to invest

It isn’t just software developers, but everyone needs to know how to invest.  There is a extremely large amount of bad information about investing and money management out there and it is easy to just do what your financial advisor says and retire at 70 years old barely making enough to survive.

Money management and investing skills are especially important to a software developer, because software developers tend to make a pretty decent wage.

My story

Let me start off by telling you a little bit about my story and how I got started in real estate investment.

I actually started investing in real estate when I was 18 years old.  As soon as I got out of high school and went to find a place of my own to live, I had decided that I did not want to rent.

My limited, but somewhat correct assessment at the time was that renting was throwing away money, but if I bought a house instead, I would be actually investing that money.  (This view is not quite correct, as it is a bit of a simplification, but that is what I thought then.)

I didn’t really have any money, just a couple thousand dollars, but I decided that I would try to find and finance a property somehow.

I finally found a pretty beat up small two bedroom house for about $68,000 that I could buy, but I needed to borrow some money for the down payment and because I had basically no credit history at all, I had to accept a 13% interest rate with a stiff penalty for paying off the loan early.  (Ouch)

Somehow I did it and became a homeowner though and ever since then I have been learning about real estate investment and adding more properties to my holdings.

After purchasing my first house, I ended up moving to Santa Monica taking a job that I was not at all qualified for during the crazy dot com boom.  I ended up renting out my property to a friend of mine when I left town.

Renting was hell.  I had all kinds of problems.  I had a string of bad renters who took advantage of me.  The house got torn up and I got overcharged to repair it.  Lots of bad stuff… It was so bad that I tried to sell the house, but the deal fell through.

But, while I was in LA “making the big bucks,” I started to do a little math.  I was making a pretty big income, but even at the size of the income I made, if I saved almost all of it, I would only become a millionaire after 10 years of hard work—assuming nothing went wrong and I could keep that inflated hourly rate that long.

The awakening

I remember thinking to myself “holy crap am I about to waste 10 years of saving every dime I can to barely become a millionaire in 10 years?”  I didn’t even realize at the time that inflation would have made the 1 million end up actually being worth about 800k.  Also, 1 million US dollars isn’t exactly rich anyway.

I remember thinking a more realistic scenario would be 20 years, and that was something I couldn’t stomach.

alarm clock thumb My Secret Non Software Developer Life I’ve Never Told You About

So, I started to do a bit of research.  How could I do something smarter than the default?  I first looked at mutual funds and thought that a 6-7% return would accelerate my plan by quite a bit, but when I looked at the numbers, I realized that the compounding effect would take around 20 years to start to be really effective as well.

For example, if I had started with $50k, adding $9k savings per month for 10 years at a 6% interest rate, I’d end up with $1.5 million at the end of 10 years, but $4.1 million at the end of 20 years.  $4.1 million is pretty much rich, but 20 years is still a long time and a 6% interest rate is not something you can just bank on for 20 years.

There had to be another way.  Some way that I could do something smarter.

I did a bit more research and found that the richest people in America made their money in real estate.  I also stumbled upon this interesting scenario that convinced me real estate was the right track.

Suppose you find a stock that you know will increase in value.  You go to the bank and say, “hey, can I borrow $90k to buy this stock?  I’ll put down a down payment of $10k.”  You’ll be laughed right out of there.  If you open up a trading account on a margin, you can usually only leverage at 100% or less.  So, if you wanted to buy stock with credit, you could put down $50k and borrow $50k… perhaps.

Now suppose you find a house that you think is a good deal for $100k.  And suppose that house is actually worth $120k—because house prices are very subjective.  Now suppose you go into the bank and say “hey, can I borrow $90k to buy this house, and I’ll put down $10k?”  If you have decent credit, you’ll get the loan easily.

Now, let’s suppose that the stock actually increases by 20%.  So, the stock is now worth $120k.   You made an investment of $50k of your own money.  You had to pay some interest on the other $50k you borrowed, because you can’t really rent your stock (well, you can, but that is sort of complicated.)  So you end up making a profit of let’s say $120k – $100k – $5k interest = $15k on your $50k investment.  Not bad, but it is about a 30% return on your investment.

Now, imagine the house you bought increases by only 10% to $110k.  You made an investment of $10k of your own money.  You had to pay interest on the $90k you borrowed, but you were also renting out the house, which covered the cost of that interest.  So you end up making a profit of let’s say $110k – $100k = $10k on your $10k investment.  Cha-ching $10k became $20k, a 100% return on investment.

Where the heck are you going to get that kind of return?

The way was clear to me

It was pretty clear to me after this little mental exercise and all the other research I did, that real estate investment was an almost guaranteed way to create true wealth in a much shorter amount of time than it would take to do so in just about any other way (Except for starting my own business, which I really wish I would have done back then.)

I began purchasing properties and financing them with 30 year fixed interest rate loans.

My plan was this: buy a new property every year if I can.

I figured the worst case scenario, as long as my rents covered my mortgage, would be that in 30 years I’d own millions of dollars worth of properties.

I figured best case scenario would be that the values would go up and I’d be able to sell some to pay others off and have millions of dollars worth of properties in a much shorter time frame.

All of my plans hinged on making some sacrifices and investing in real estate for at least 10 years, I still wasn’t thinking short term.  But, this plan seemed much better than the alternative which required me to have a very high income for 20 years and live on a tiny portion of it.  It was also much less susceptible to possible problems.  I was in much more control of my future with this plan.

I figured best case, I could basically “retire” at 30.  Worst case, I could retire rich at 50 (After all the 30 years loans were basically paid off.)

So that’s my story

Well, that is my story of how I got into real estate investment.  I actually ended up getting a real estate license and learning quite a bit about properties, rental management and investing.  And I did figure out how to deal with tenants.  With many units today, I have less trouble than I did with 1 unit back then.

By the way, if you are interested in learning more about real estate investment.  One book I highly recommend is The Millionaire Real Estate investor.  There are many really bad and “scammy” real estate investment books out there, but this book is actually really good.

So, what do you think?  Is this a topic that interests you?  Do you want to hear more about financial matters and real estate investment here?

Like I said, I think all software developers and programmers should at least have some money management skills, but what do you think?

Why I Don’t Do Code Katas

Update: be sure to check out this comment chain to see a bit more clarification on what code katas really are.  Thanks for Cory Foy for pointing out that I was unfairly calling all code katas as solving the same programming problem over and over again.  Only some people treat code katas that way and this post is about why that kind of code kata is not effective.  I also updated a few words in this post to reflect this point.

I don’t want to seem like I am bragging, but there is something I just have to get off my chest.

But, before I tell you what amazing skill I have mastered through countless hours of boring practice, let me tell you a bit about my training schedule.

Everyday I get up in the morning. I put on my shoes. I begin my practice.
Usually I start with a small warm-up, just to get the blood flowing on the way to my office at the end of the hall.

Later in the day, I’ll wander out of my office for lunch and practice more on the way to the kitchen.

Right now as I am typing out this blog post, I am on the treadmill honing my craft one painstaking repetitive step at a time.

That is right, you may have guessed it by now—I am a master walker.

All my life I have been practicing this humble skill.  Each and every day I practice my secret craft.  I see other fools riding around on mopeds and motorized scooters sheepishly talking of their perceived skill at bipedal transportation.  But, although outwardly I acknowledge their words, inwardly I know that I am special, because I hone my skill to a craft.

Sounds ludicrous?  That is what it sounds like to me when some people talk about doing code katas.

Code Katas

What is a Code Kata you may ask?  Some people think a Code Kata is when you solve the same programming problem over and over again, thinking you are actually practicing something other than using shortcuts in your IDE. (To be fair, not all people view Code Katas that way.)code kata thumb Why I Dont Do Code Katas

These kinds of Code Katas come from a failed attempt to forcibly simulate the same kind of practicing that a musician or athlete would perform in order to become better at their vocation.

Why Code Katas aren’t effective

Don’t get me wrong, the intention behind Code Katas seems to be well placed, and I am all for software craftsmanship (although not the elitism that sometimes accompanies it.)  But, just as walking every single day doesn’t make you a master walker, and driving a car every day doesn’t make you a superior driver, solving the same sets of programming problems over and over again won’t make you a master programmer.

If you still have your doubts, consider old people.  Old people are not master walkers or master drivers, yet they have been doing both of those activities day in and day out for many years.  Not only do they not master these skills, the skills actually atrophy—they become worse at them, and not just because their muscles and reflexes become worse from age, it is because repeating the same thing over and over again without an increasing level of challenge actually results in the mind becoming complacent with the activity which leads to the eventual degradation of it.  (At least, this appears to be the case to me.)

Don’t lose hope though, a little later on I will tell you a real way to practice your craft in software development—one that will give you results—but, first let’s dissect the cases of walking and driving a little bit further to see why repeated practice of those activities seems to have diminishing returns.

Doing the same thing over and over again doesn’t make us better at it

We first learn from walking and driving, because everything is new and challenging.  Although walking seems like a repetitive process, it is actually the lack of repetition that provides the challenge our brain and body need to actually benefit from it.

As a toddler learning to walk or a teenager learning to drive, we are constantly bombarded with new scenarios and challenges that we haven’t faced before.  What happens when the dog runs by and brushes our leg?  How does this affect our balance and what do we have to do to adjust?  What about this new surface?  The carpet seems to absorb our feet and create more friction when we attempt to walk on it.  How do we compensate to balance on this surface?  Walking with socks on the floor gives us less grip, etc.learning to walk thumb Why I Dont Do Code Katas

But, as an adult, or experienced walker or driver, we are not challenged in nearly the same way;  we’ve already seen most of the scenarios.  Our daily commute to work rarely presents us with an unfamiliar stimulus or problem to solve.  We operate on autopilot, automatically walking and driving to our destinations without much effort or thought.

Repeatedly writing the code to solve the same programming problem over and over again is exactly the same thing, except unless you are introducing new challenges by adding constraints and twists, you are only benefiting from the exercise the first, and perhaps, the second time, you undertake the activity.

Now, not all programmers who do Code Katas repeat the exact same code over and over again.  Some of them attempt to solve the same problem, but this time not using any loops or limited the line count to a certain number or some other similar constraint.   This kind of practice is actual worthwhile practice which challenges the mind and introduces new scenarios that create new neural pathways in the brain and strengthen others. (Here is a great example of book that encourages you to do just that.  I highly recommend working through the problems in this book.)

Simply typing the same code into the same IDE over and over again for 10 minutes a day may make you feel relaxed and calm or even like a concert violinist arduously practicing their scales, but at the very best it will make you faster at using your IDE and typing code; skills which can be easily practiced through the course of a normal day’s work.  If you want to be really good at writing the code to sort lists of words and calculate prices for grocery store items in a cart, go ahead, be my guest.

How real mastery is achieved

If you are resisting what I am saying at this point, it is likely because you still mistakenly believe that walking and driving are in a different category than playing music, sports and programming.  But, the truth of the matter is that walking, running, music, sports, and programming are in the same category, or rather, there are no categories.

It turns out there are actually master walker and master drivers.  One sport that is not all that widely known goes by the name of Parkour or Freerunning.  Don’t believe me, check out this video for an example.  In this sport, the athlete becomes exceptionally good at traversing around everyday locations on their own two feet.  It is amazing what some of these practitioners can do—just watch the video if you don’t believe me.

And as for driving, I probably don’t need to convince you that Nascar is “kind of a big deal.”

My point is that you are not going to become a Parkour expert or Nascar driver by just walking around your neighborhood or driving your car to and from work, even if you do tend to drive like a bat out of hell.  To get to that level of skill in those seemingly mundane activities, you have to constantly practice at a higher level of difficulty and continually introduce new challenges.

In fact, when we actually look at what real musicians and sports athletes do, it is much of the same.  I seriously doubt many musicians you hear on the radio or see in concert repeatedly played “bah bah black sheep” or “twinkle twinkle little star” on their instruments until one day they achieved mastery.  And in the professional sports world, achievement only comes through repeatedly pushing beyond one’s limits day after day.

The point is this: if you want to get better at something, repeating practice alone is not enough.  You must practice with increased difficulty and challenge.

How to improve your programming skills

So, how then do you become a master craftsman at the vocation of software development?  If you don’t use Code Katas, how do you practice your craft?
Let me start off by giving you the best example I have ever seen.

This is Jennifer Dewalt’s blog; she decided to learn to code by building 180 websites in 180 days.  While you are sitting at your keyboard typing the same 20 lines of code into your IDE over and over again, Jennifer is creating a new thing every single day and facing a brand new challenge.

Who do you think will improve their skills more after 180 days, you or Jennifer?  I know who I’d hire without even thinking twice.

I get lots of emails asking me about the best way to learn programming or how someone can improve their skills.  Recently, I’ve gotten a lot of emails asking about how to learn Android development.  Do you know what I tell all these inquisitive minds?

Make Android apps.

But, umm, what book can I read?

No book, just come up with an idea and try to create it.  Figure out what you need to do along the way.  When you get stuck, go look for the answer or seek help.
But, I need to know what I am doing first.

Says who?  Do and then learn.  Learn and do at the same time, reading a book or repeating the same exercise over and over again won’t make you smarter or more skillful; constantly challenging your mind and current skills will.

Want to learn more?

I’ve got plenty more to say on the topic and many more techniques that are way more effective then Code Katas which you can use to hone your programming skills.  I can’t fit it into a single post like this, but I’ll be putting it into the top secret project I am working on to help developers boost their careers and learn to market themselves.

If you’d like to be one of the first to be notified when it is available, sign up here.  I’ll be including lots of practical valuable information that you probably won’t find anywhere else.

So, what do you think?  Do you do Code Katas right now?  If so, do you think they are actually useful?  Let me know in the comments below.

4 Things I Wish I Would Have Known When I Started My Software Development Career

My software development career began about 15 years ago.

But only in about the last 5 years did I really start to see a large boost in my software development career.

Here are some of the things I wish I would have known when I got started in the software development industry; things that would have made me more successful, much earlier, if I would have known them.

There is no “right way” in software development

I wasted a large amount of time, both in studying and arguing, early on in my career, falsely believing there was an absolute “right way” for many aspects of software development.

It turns out that just about everything I once thought was correct about software development at some point turned out to be wrong.

But more importantly, I found that very few things were black and white.  Almost every decision when writing code and developing software is based on the current circumstances.

I’ve talked before about how the religious adoption of a technology can be harmful to software developers, but this topic goes beyond just a technology.

It is also true that no best practice is universal.  Even highly charged topics like whether or not to unit test or whether agile or waterfall methodologies are best, do not have straightforward one-is-always-right answers.

In my career, I’ve wasted plenty of time on the “right way” road that led to nowhere instead of taking the “pragmatic” (practical) road, which would have carried me much further.

Reading a book cover-to-cover is not the best way to learn

When I first started wanting to grow my knowledge of programming and different technologies, I spent too much time reading technical books about a specific technology cover to cover.

reading book thumb 4 Things I Wish I Would Have Known When I Started My Software Development Career

There is nothing wrong with reading books, but often the choice of what book to read and what parts of it to read are very important.

For example, I remember reading a very large book on programming with Visual C++.  (I’m pretty sure it was an earlier version of this book.)  Anyway, the book was a good book with lots of information, but reading it cover to cover was not the best approach to learning Visual C++.

I would have learned and retained a lot more by skimming over the chapters of the book to get a broad understanding of what there was to know about Visual C++, then figuring out what things were most important to learn first.

I would have had much more success by sitting down and actually practicing the basics by trying to actually build something than just reading or going through examples in the book.  You don’t really learn a technology until you’ve solved real problems with it.

Learning particular technologies in-depth is a waste of time

Not only did I waste time by reading books cover to cover, but I also often chose to read the wrong books.

I had mistakenly believed that learning a particular technology inside-out would be a good way to advance my career.

I spent too much time reading books about very specific technologies like ASP.NET or Hibernate instead of reading more books like “Code Complete,” “Clean Code,” and “Agile Principles, Patterns And Practices in C#.” (All of these books, by the way, I recommend that you read, if you haven’t already.)

While it is important to know about the technology you are using, it isn’t important to be an absolute expert in that particular technology.  There isn’t much benefit to knowing the exact API call to make when you can just easily look it up when you need it.

Too many technologies that I spent a good amount of time learning about in depth, ended up either dying out or being technologies that I eventually abandoned myself.  Most of the knowledge about those specific technologies ended up representing a big waste of time.

I found that it was important to become an expert at whatever programming language that I was using at the time, because expertise in a particular programming language will usually last you a pretty long time; I definitely would have still spent time learning in depth about C++, C# and Java, but, I perhaps, spent a little too much time learning all the intricacies of C++, which isn’t benefiting me much now.

Community is extremely important in your software development career

Early in my career, I made the mistake of not really reaching out to the community for help and to provide help to others.community thumb 4 Things I Wish I Would Have Known When I Started My Software Development Career

I was always good about helping my coworkers and being social at the various jobs I held, but I never really reached much beyond my company.

I spent a large amount of time trying to make an investment in my career at a particular company at the expense of making an investment of my time in the software development communities that I was involved in.

I spent lots of time creating internal presentations on technologies or best practices that could have been spent creating content and material that could have served the community as a whole, as well as brought me recognition at my job.

I also made the mistake of not thinking that I had something valuable to contribute.

I talk to many beginning software developers now and sometimes I think they have much more to contribute to the community than us software developers that have been in the field for a long time, because they understand better the issues that other beginners are struggling with.

If I could do it over again, I would have made sure to be much more involved in conferences and user groups earlier in my career.  I would have started my blog much earlier and I would have used much of my learning time to create projects and resources that would be able to help others rather than just reading a book.

Always have a side project

Perhaps the biggest change I would have made that would have impacted my career the most would have been to cut out all the TV watching, Everquest and World of Warcraft playing I did earlier in my life and replace that time with work on a side project.

I’ve wasted a pretty sizable amount of time in my life doing things that were enjoyable, but didn’t produce any long term benefit for my life.

About 3-4 years ago, I pretty much cut out watching TV completely and now I hardly ever watch movies either.  TV and most movies are just a huge waste of time that you could be using to do something useful.  The same goes for video games for the most part, but at least with video games you are actively doing something not just absorbing useless information.

I’ll always love to play video games and I don’t think I’ll ever stop, but I do wish I would have spent a good deal of the time I spent playing video games and watching TV on a side project instead.

Sadly, the first real side project I actually took on was only about 3 years ago when I started creating my first Android application.

When you are working for someone else, it is really important to spend time working for yourself as well, otherwise you are building someone else’s empire while neglecting your own.

Not only did I learn a huge amount from the side projects I have taken on in the last few years, but I have benefited greatly from them.  In fact, one of those side projects, creating Pluralsight courses, is something I am doing pretty much full time now.

Putting everything I learned together

These are just a few of the things that I wish I had known when I first started my software development career, but there are many more and lots of other things that I did do right from the beginning.

I’m actually working on a top secret project to put all this information together to help developers boost their career and learn to market themselves.

If you want to be the first to be notified when this project gets officially launched, sign up here, and I’ll be sure to let you know.

What about you?

What are some of the things you wish you would have known when you started your software development career?  Let me know in the comments below.

Quick side note: if you are stopping here reading this post, you are probably the kind of developer that cares about your career.  I’m putting together a complete package full of information on how to really boost you software development career and increase your earning potential.  It is only available for preorder right now.  I’m only going to be selling it at this heavily discounted price for a short time.  I’ll also have some exclusive interview with famous software developers like Bob Martin, Jon Skeet, and Jeff Atwood sharing their secrets to their success.

What Software Developers Can Learn From Weiner

Don’t stick your Weiner out there

It’s good to get noticed, but make sure you get noticed for the right things.  You don’t want to be caught with a permanent picture out there on the internet of the things of yours that should remain hidden.

Anthony Weiner official portrait 112th Congress thumb What Software Developers Can Learn From Weiner

What I mean by this, is that as a software developer you want to look like a software developer, not a political activist.  I’ve said this a lot of times in various forms, but with the recent huge media coverage of a certain trial in Florida, I’ve seen way too many software developers potentially ruining their careers because they were so eager to show everyone their—opinions.

Remember, the internet is a permanent record that can never be erased.  No matter what you do, some server out there somewhere will have a record of what you posted, or someone will have taken a screen capture of it.

The same goes for the workplace in general.

People get really offended when they think I am giving them the message to not be themselves.  When I say things like this, I hear many developers retort, “What? If an employer or customer doesn’t like who I am, then I don’t want to work with them either.”

I’m not saying don’t be yourself.  I am saying show the best version of yourself possible.  Everyone in the world appreciates discretion and tactfulness.  Few people want to work with someone professionally who publically ascribes to themselves the opposite characteristics.

Your Weiner isn’t too big to fall

Just because you have done great things in the past doesn’t mean you will get credit for them in the future.  As a software developer you are constantly evaluated based on the skills you possess now that are valuable in the current market, not the ones you had 5 years ago that were valuable in that market.

I see many software developers that were once great legends who accomplished splendid things in the past resting on their laurels.

You chose this industry, no one else made the choice for you.  So you should have known going in that software development was a industry constantly full of change and flux.

If you want to learn some set of skills that will last your whole career and never require you to change or learn something new, perhaps you should be a plumber or an electrician. (Although, I’d venture to guess even those positions would have some degree of continual learning involved.)

The point is, knowing C++ or COBOL or assembly language is only going to take you so far for so long.  If you want to keep rising up and not fall backwards in your career, you are going to have to be that old dog that learns some new tricks.

(Here is a link to a query on Amazon for the new programming books that come out in the last 30 days.  A great way to see what is popular right now and then learn about it.)

It is easy to look at these young JavaScript kids and Rubiests and say “get off my lawn,” as your own skills rot and your value decreases while theirs increases, but it really isn’t going to do you much good.

No one wants to see your Weiner

I know you think what you’ve got is awesome and it probably is, but people are more concerned with what you can do for them, not how awesome you are.seeing wiener thumb What Software Developers Can Learn From Weiner

You always have to remember that people primarily think about and are concerned with themselves.

When I hire someone to do a job, I don’t hire them because of how awesome they are, I hire them because I think about how awesome of a job they will be able to do for it.

I know many software developers who have tried to make their mark by showing how superior and awesome their own skills are, instead of demonstrating practically how they can be beneficial to a team or a project.

When hiring someone to pack and move your house would you rather hire a big muscly guy who stands around flexing in the mirror or would you rather hire a mediocre strength average Joe that is extremely hard working and diligent?

Yet, so many software developers I talk to try and show themselves as the big muscly mover, but make no indication of what kind of job they will do.

All the skills and ability in the world are of no good to anyone unless they are put to use.

Flashing your Weiner once can be forgiven, doing it twice gets you in trouble

It is OK to make mistakes, everyone makes mistakes.  It is part of life and it is good.  Failing is part of learning.  However, when you make a mistake and you are called out on that mistake, you should carefully avoid to make the same mistake again.two wieners thumb What Software Developers Can Learn From Weiner

I’ve seen quite a few people get fired—excuse me “laid off”—and the reason has almost always been for making the same mistake more than once.

When you are called out on a mistake you have made and you make that exact mistake again, especially within a short time frame, it is taken as an utter disrespect and contempt for authority and often as a sign of extreme arrogance and recklessness.

Of course this all hinges on the size of the mistake.  It isn’t as big of a deal to forget to add the bug number to the comment of the check-in you made, a couple of times, but taking down production for a day will probably only be forgiven once.

Don’t be paranoid about making mistakes and failing—fear will paralyze and destroy your progress, much more than mistakes will—but, instead be cautious, careful and deliberate in your actions.  If you make a mistake, learn from it.  Take steps to make sure it won’t happen again and then move on.

More career advice and tips

If you like this article and want to get more useful software development career tips and advice, take a moment now and sign up to be notified when I launch my top secret product that will help developers give their career a huge boost.

Getting Started With Google’s Dart Language

I was a little skeptical of the Dart language when Google first announced it.

When I looked at the syntax of the language I thought that it didn’t really seem to offer anything new.

Why create another language that is not very different than what we already have?

How is this actually much better than JavaScript?

But after having worked with Dart now for quite awhile and producing a Pluralsight course on Dart, I’ve completely changed my mind.

The Dart language is awesome!

What makes the Dart language so awesome is all the little subtleties the language designers added to the language, not any major new concepts or ideas.

When I started writing Dart code it felt exactly right.  It felt like all the little annoyances that I had with languages like C#, Java and JavaScript were removed by the Dart language.

In fact, the real beauty of Dart is that if you already know C# or Java and JavaScript, you’ll probably be able to learn enough about the Dart language to be productive in Dart in less than an hour.

Before I show you just how easy it is to get started, let me briefly tell you what the Dart language is:

  • Object oriented.  Everything is an object including primitives and nulls
  • Optionally typed.  You can add type annotations which static checking tools can use to help you find errors in your code, but you don’t have to use them.
  • Interpreted.  Dart is run in a VM, but it is not compiled first.  Round-trip time for making changes is very short.
  • Compatible with JavaScript.  You can compile your Dart code to JavaScript and run Dart applications in any modern browser.
  • FAST!  Dart is very fast, much faster than JavaScript in just about every test.

Some cool language features that I like about the Dart language:

  • Mixins.  Instead of using inheritance, you can use a mixin to add functionality to a class without directly inheriting from another class.
  • Isolates.  Instead of threads, the Dart language uses isolates for concurrency.  Isolates can’t actually share any memory, they pass information though messages.  It is very hard to shoot yourself in the foot.
  • Simplified built-in types.  Numbers can be either int or double, and you can just use num, if you don’t care.  Lists and maps can be declared as literals.  An array is just a special case of a list.
  • Functions are first-class objects.  You can pass them around just like any other object.  There is even a lambda-like short-hand for creating a one-liner function.
  • Top level functions and variables.  Don’t want to put a function or variable in a class?  Good, you don’t have to.  In the Dart language, you can declare them anywhere you want.
  • Simplified classes.  There is short-hand for declaring constructors that assign parameters to class members.  Class members don’t have protected, private, public.  Member variables are automatically properties.
  • String interpolation.  No more string format methods, just use the $variableName in a string to have its value expanded.

Getting setup with the Dart language

Ready to get running in 5 minutes?

Ok, read on.

Step 1: Go to http://dartlang.org and click “Get started.”

2013 06 16 11 12 28 thumb Getting Started With Google’s Dart Language

Step 2: Download Dart (64-bit or 32-bit.)  Unzip the file and copy the “dart” folder to where you want Dart installed.

This folder will contain the Dart Editor, the Dart SDK and the Chromium web browser which has a built-in Dart VM.

Step 3: Run DartEditor.exe

Dart Editor 2013 06 16 11 18 01 thumb Getting Started With Google’s Dart Language

That is it, now you are ready to rock some Dart code!

Creating your first Dart language App

The Dart language can actually be used outside of a browser, just like you can use JavaScript with Node.js.  But, most developers will probably want to use Dart the same way we use JavaScript in a web application today.

I’m going to walk you through a real simple example that will show you how to create a basic Dart application that is able to respond to a button click and manipulate some DOM data.  For more advanced examples, you can check out my recently released Pluralsight course on Creating Web Applications with Dart. (I will plug this one more time before this post is over… wait for it…)

Step 1:

Go to File –> New Application.

Fill in your application name.  I’ll call mine HelloWorldDartWeb.

Leave “Generate sample content” checked.

Select “Web application.”

2013 06 16 11 24 03 thumb Getting Started With Google’s Dart Language

Step 2:

Open the helloworlddartweb.html file and clear out everything in the body element except for the two script tags at the bottom.

The first script tag imports our actual Dart file, just like you would use to add JavaScript to a page.

The second script adds Dart support to the browser.

Step 3:

Add the following HTML to the body tag in the helloworlddartweb.html file:

 <button id="theButton" >Press Me!</button>
 <div id="resultDiv"></div>

This will just create a button and a div.  We are going to add some Dart code to respond to a button click and populate the div with some text.

Step 4:

Open the helloworlddartweb.dart file and clear out everything in main() and delete the reverseText function.

Notice that there are only two things we really will need in our .dart file.  Just an import ‘dart:html’, to import that html library for Dart, and the main function, which executes as soon the DOM content is loaded on the page.

Step 5:

Edit the helloworldweb.dart file to make it look like this:

import 'dart:html';

void main() {
  var button = query("#theButton");
  button.onClick.listen(addResult);
}

void addResult(Event e) {
  var resultDiv = query("#resultDiv");
  resultDiv.text = "You clicked the button";
}

This code simply gets the button using a CSS selector.  It uses the query function to do this.

Then we register the addResult function as an event handler for the onClick event for the button.

In the addResult function, we simply query for the resultDiv and change its text.

After you run this example, you should see a result like this:

HelloWorldDartWeb   Chromium 2013 06 16 11 47 56 thumb Getting Started With Google’s Dart Language

Step 6:

Now change the Dart code to look like this:

import 'dart:html';

void main() {
  query("#theButton")
    .onClick.listen(
        (e) => query("#resultDiv").text = "You clicked the button!"
    );
}

Try running the code again and you should see it works exactly as before.  Here we just shortened the code to a single line by using the short-hand function syntax.

Going further with the Dart language

So, that is just the basics of Dart.  I wanted to show you how to get started really quickly, but I am sure there is more you will want to learn about Dart.

We can of course do much more with Dart, especially when building web applications.  There is a Dart Web UI library which can be used to do templating and data binding so we can simplify our Dart code even further.

The language itself is pretty simple.  Most C# and Java developers, as well as JavaScript developers, should be able to read and understand Dart code without any assistance.  But here is a link to an overview of the language.

If you are looking for a more in-depth coverage of the Dart language and want to see how to build a real application with Dart, check out my Introduction To Building Web Applications With Dart course on Pluralsight, where I go over the entire language and guide you through building a real application, as well as cover some of the more advanced features like mixins and isolates.

Also, I could only find two books on the Dart Language.

I don’t know if Dart will end up replacing JavaScript, but I do think Dart has the potential.  It really is an awesome language that is fun to develop in.

That is strong praise coming from me, since I really tend to dislike dynamic languages.  The creators of Dart have really done a good job of creating a language that is succinct, fast, easy to work with and has the best advantages of strongly typed languages with all the flexibility of dynamic languages like JavaScript.

Get Up and CODE and YouTube Videos

For those of you who frequent my blog and are looking for my latest Get Up and CODE podcast episode and YouTube video for the week, I have a bit of an announcement.

I am going to start posting these blog posts every Monday.

The YouTube videos will be going up every Wednesday.

The Get Up and CODE podcast will be coming on every Friday.

When my new website design is done, you’ll be able to find the latest episodes of each on the side bar, so I’ll stop including them in each weekly post.

But here is last week Get Up and CODE, where Iris and I talk about basic weight training.

Get Up And Code 006: Basic Weight Training

play audio Getting Started With Google’s Dart Language