How Long Does It Take to Learn a New Skill?

BlackJack Program

When employers say they need specific skills, job seekers often reply that an experienced IT professional can learn a new language or technology quickly. But is that really the case? It may be if the skill in question is closely related to your experience, but if you’re looking to pick up a new language from scratch the challenge is much greater.

There aren’t many programming languages general purpose enough so that when you learn one you may never need to pick up something else. I’m thinking of C# or Java. In my case, I learned Basic in 1976 and for the next five years didn’t need to learn another. I learned Pascal in 1978 but didn’t use it until 1983. Then games computers came along in the early 80s and before I knew it, I’d picked up 6502 assembler and three years later Z80.

Click here to find software engineering jobs.

Through the 90s I learned and used Ada, C++ and C. Since 2000 I’ve used SQL, PHP, HTML, CSS, JavaScript, Java, C#, Go and Python. I’ve programmed professionally in all but the last two. I’ve dabbled with Objective-C but prefer Xamarin, which is C# for iPhone and Android.

These days you can’t be a software developer unless you know at least three languages or associated technologies. If you want to work in games you need C++ with DirectX or OpenGL and C#, Java or Objective-C for mobile. For Web development you need either Java, PHP or C#, together with HTML, CSS and JavaScript. For desktop development you’ll need C# or Java, plus SQL. For systems programming you’ll likely need C or C++ and maybe a little assembler.

If you start with a simple procedural language like C or Basic, you’ll need object-oriented programming and knowledge of inheritance, encapsulation and polymorphism in order to learn another language. You can get that before or as you learn C++, Java or C#. However, you can do a lot of Python without knowing OOP, though it helps.

What’s the Best Way?

For me, the most effective way to learn is to convert an existing program into the new language. Nothing beats finding out how to do things yourself. These days, the Web makes things a lot easier. Sites like Stack Overflow have answers that turn roadblocks into gentle speed bumps.

Your learning should include data structures built into the language or added on through libraries. In C you might use pointers, but in C#, Python or Java you get a much wider range of advanced data structures like ArrayLists, Hash Maps or Dictionaries. You should also learn how to manipulate strings and read from/write to text files. Do you know how to hold data in memory? Should you learn SQL or NoSQL databases? Does the new language support generics or templates?

There’s always more to learn and most programming languages grow more complicated with time. For instance, functional programming techniques such as LINQ in C# (and the equivalent in Java 8) let you write very understandable and elegant code, which always looks good on a resume. And what about threads and multithreading? Designing classes and complex data structures, and knowing how to make things perform faster? Writing relational database software means you’ll have to understand SQL. Yet another technology to learn!

Other Ways

There’s always book learning, but that can be hard or impossible for some. There are people who prefer to learn from video online courses. There are tons of options for that, such as the MOOCs from Coursera, edX or Udacity. I took a Coursera course and learned a large chunk of Python in just seven weeks part-time. I wouldn’t claim to be an expert, but the program gave me a fantastic grounding. Good as this approach is, however, classroom learning is probably the best way to go as you get structure and have answers on tap. However, it can be expensive unless you have a really great employer.

This raises a question: How well do you need to know a language to count yourself as proficient enough to go for a job? Recruiters generally measure experience by the time you’ve spent programming during actual work. Gurus like Malcolm Gladwell consider 5,000 – 10,000 hours necessary to turn you into a master.

So How Long to Learn?

Understanding its syntax is the biggest part of learning a new language. For example, to develop iPhone or iPad apps in iOS, you have to understand iOS and what it takes to go from source code to a working application, or at least running on an Emulator. And, you’ll need to know how to set up development tools, a build machine, etc. It’s all documented but you can expect to take a few hours, or maybe a day or two or longer, getting to grips with it.

Rule of thumb: Unless you’re an absolute genius with an eidetic memory, in a weekend you’ll just start to pick things up. A full week with tuition can give you a good understanding, but I believe three months to a year studying part-time and writing lots of code is what you’ll need to really know your way around.  Much depends on how similar the language is to the language(s) you already know.

That’s enough reading. Now get to work!

Related Stories

Image: Dice

Comments

  1. BY Cicuta says:

    It depends, I am not talking about learning to make a program in C or any other computer language saying “Hello World” or doing simple system’s administration. For instance, can you learn to make computer programs in assembly language in a matter of 2 weeks at a certification seminar? …think about it more than twice! Or, say, become an expert in physics or mathematics; or for that matter learn to do RF design in two weeks at another 2 weeks certification seminar? So, it depends what type of new skills you are talking about and that is the problem with today’s industry which is going down the drain due to their stupidity thinking that one person can do it all… typical of the IT industry in fact. My advise is for young people to become a Physical Therapist… they are stupid and can make up to $4 million dollars per year in some states of the union.

  2. BY Joe Anonymous says:

    The problem is not leaning the language or new API(s) added to a given language, the issue is convincing employer(s) you know it. I have 2 years of professional in C++/SQL, 3yrs of Java/SQL experience and 2 years of vb.net experience, however I have not been paid professionally for those skills is five years. However I’ve kept up with current developments in Java by learning and developing applications for android devices. I kept my C++/OOP skill set up by learning SFML and DirectX 10 and currently 11 for game development also I’ve picked up C#/ASP/MVC for web development. And as soon as I’m done with my checkers game I want to learn C#/MonoTouch so I can begin to develop applications for IOS devices. However I’ve found it exceedingly difficult to get even an interview for a Java or C# programming job. I think the challenge is for employers to give, has President Obama said in his state of the Union address, the long term unemployed a break, and they should assume we are not keeping our skill sets up.

  3. BY Cicuta says:

    Hey… I bet that most people do not know what an Emulator is. Question for you: Can you do a good to excellent administration on AIX, Solaris, HP-Unix, System X, Cisco OS, Reliant Unix, NetApps, BEA WebLogic, EMC, BSD Unix, Apache, Linux, Sun One Web Server, and applications all under the same umbrella for a company with more than 1,000 servers and more than 100,000 users? And that is what most companies want.

    • BY joe mineo says:

      Cicuta, you are talking about two very different jobs. Software engineers do not typically concern themselves with the administration of servers and networks. We write programs and develop small to large scale software systems that run on those servers. Almost every respondent I’ve read in this comment section strikes me as one of those that at best have learned to program on their own time and do not necessarily have the education to call themselves a programmer let alone a software engineer, including the author. Unfortunately, for those that are having trouble convincing employers that you can learn or have learned on your own time, the latest languages or technologies, employers are looking for people who have put that knowledge to work developing something commercially. It’s not enough to work through the samples provided by a text or even a training course. Find a way to put it to use in a real live product. That will get someone’s attention.

  4. BY Cicuta says:

    Oh, and by the way; be able to program in C, C++, Fortran, Java, HP- Basic, Scripting in all shells and to top it off do Networking design and networking administration and troubleshooting; and also do Oracle, DB2, Visualization of systems, and design of Data Centers from top to bottom.

    • BY Nightcrawler says:

      Here’s an “Entry-Level Developer” job (yes, it was listed as “entry-level”) in my area. This is a typical job ad:

      ————————————————————
      This is an exciting opportunity to join the team of a fast growing startup, building software for the power industry. In this role, the candidate will develop enhancements and customizations to our unique web based applications for traditional and renewable power generation. Candidate will develop customized web pages, controls, and reports, based on customer requests and work closely in a team environment. Candidate will also coordinate and support implementations of the Company’s software for customers.

      Essential Duties & Responsibilities:
      • Part of a team that designs, develops and supports a suite of web based applications performing product development and product enhancements.
      • Assist in the design and integration of applications and technologies.
      • Full life cycle development including testing and integration.
      • Prepare and review necessary product-related documentation.
      • Troubleshoot and resolve production issues in a timely fashion.
      • Work with development team to identify global enhancement requests and play a role in the overall architecture of the Company solution.
      • Work with customers to identify and create innovative business solutions to improve their business processes and increase their profitability.

      Skills/Qualifications:
      • BS degree in MIS/CIS/CSE or equivalent formal training
      • 1-2 years’ experience as a developer (working for a power generation, power marketing, or energy trading department is a plus)
      • Basic knowledge of developing web based applications utilizing .NET and C#.
      • Experience with HTML, XML, XSLT, and Internet/Intranet database-driven applications. Must have XHTML, XSLT, JavaScript
      • Basic knowledge of OO languages
      • 1-2 years’ experience developing/supporting Microsoft SQL Server 2000 or greater, T-SQL, and Stored Procedures
      • Proficient with WCF design and implementation
      • A motivated self-starter that is able to work independently and in teams on tasks and projects with limited supervision.
      • Capability to effectively communicate to peers, management and customers on progress, troubleshooting issues, and resolution and work in a team environment.
      • Excellent verbal and written communication skills with a strong focus on customer facing interaction, customer service, and presentation.
      • Experience with Team Foundation Studio a plus.
      ———————————————————————-

      And people stare at me when I tell them that getting a Math/CIS degree was the single biggest mistake of my life. I just wasn’t brilliant enough to learn all of these things on my own. Thus, three years past graduation, I never spent a single day working in the tech field, and have had nothing but financial problems (including a Chapter 7 bankruptcy, with a possible foreclosure coming up) since. My lack of intelligence, of course, begs the question of why I was handed this degree in the first place.

      I wish it could have been an accomplishment I was proud of, instead of something I’m ashamed of.

      • BY Reality Check says:

        And we all know what that job posting was for – it was put there to ‘prove’ there was no US resident with the listed skills – and therefore the company could justify bringing in an H1b at the pay level of a junior developers. Talk to your congressman/congresswoman/senator and point this out BEFORE they do any more immigration ‘reform’.

        • BY STEVE says:

          @Reality Check: I agree wholeheartedly. At the risk of singling out any groups, I find it very hard to believe that the education and background of someone who has lived his entire life in a third-world country is going to automatically have a superior education and better experience than someone who has lived in the USA his entire life. If the computer science education in Bombay is so much superior, then perhaps all US computer science students should reside there while they obtain their degree.

          I think that offering a special status for attracting some foreign workers may be nice, but I am thinking more like the famed operation paperclip where the USA gained rocket scientists at the end of world war 2. Otherwise, the H1b program needs to be rolled back to maybe 10 or so, if not zero, and send all these workers home to make their own country a better place to live.

  5. BY Mark says:

    The problem is not leaning the language or new API(s) added to a given language, the issue is convincing employer(s) you know it. I have 2 years of professional in C++/SQL, 3yrs of Java/SQL experience and 2 years of vb.net experience, however I have not been paid professionally for those skills is five years. However I’ve kept up with current developments in Java by learning and developing applications for android devices. I kept my C++/OOP skill set up by learning SFML and DirectX 10 and currently 11 for game development also I’ve picked up C#/ASP/MVC for web development. And as soon as I’m done with my checkers game I want to learn C#/MonoTouch so I can begin to develop applications for IOS devices. However I’ve found it exceedingly difficult to get even an interview for a Java or C# programming job. I think the challenge is for employers to give, has President Obama said in his state of the Union address, the long term unemployed a break, and they should assume we are not keeping our skill sets up.

  6. BY Nightcrawler says:

    Three languages won’t even get you an unpaid “internship.” Most job ads require applicants to have fluency in *at least* half a dozen.

    I believe the estimate of three months to a year to attain complete fluency in a language. However, there are two problems:

    1) How do you support yourself while dedicating several years to learning all of these languages? You cannot obtain a job–not even at minimum wage–until you have complete fluency in at least half a dozen.

    2) By the time you’ve attained fluency in a language, it has become deprecated, and now you have to start all over again with a brand-new language. Meanwhile, you still don’t have any sort of job (see No. 1).

  7. BY Glen Smith says:

    Didn’t see it directly mentioned but the best tool for leaning new languages for me have been program generators that generate the actual code.

  8. BY MikeTech says:

    Joel Spolsky respectfully disagrees. I’ll trust him.

  9. BY Steve says:

    If a job posting says “entry level”, then it shouldn’t require any formal certifications beyond the typical university diploma, and it shouldn’t require any experience outside of the classroom for anything, let alone the frequent 1-2 years of experience in A, B, C, and D (insert alphabet list of requirements). Specialty skills that may be proprietary to an industry or which are simply never formally taught as an actual university class should never be a requirement, but are often. Most university graduates had to have written some term papers and made presentations to their classes, so they shouldn’t have to “prove” they have communications skills….let alone be required to document how long they have used Microsoft Word, PowerPoint, and have to document how fast they can type and how many credit-hours of instruction were spent on the newest release of Microsoft Office.

    • BY Nightcrawler says:

      I wish I could get a job based on how quickly I can type. I’m a former transcriptionist with a speed of 80-100 wpm. I can easily pass any test on any version of Office, Windows or Mac; I’ve been using these programs since they first came out in the early 90′s.

      Communications skills can be easily assessed in an interview.

      The conclusion I’ve come to is that these jobs aren’t actually “entry-level.” They just pay entry-level wages. I would have been willing to work for minimum wage to get started. Heck, I spent 13 weeks working 50+ hours a week at a car lot for only $300.00/week….well under minimum wage.

      What I couldn’t afford to do, what I still cannot do, is work for NO wage, or for so little that my gas and parking costs eat up my salary. The car lot wasn’t around the block, but my take-home pay was $275.00/week, and my gas costs were about $45.00/week, with free parking.

      I do not understand why a tech company couldn’t have paid me as much as the car lot.

  10. BY John Doe unemployed americann citizen says:

    And you now see what happens when you let a bunch of ignorant people do anything such as has been done. This is why I’m getting out of this industry and becoming a shark fulltime.

  11. BY Tula says:

    I’m afraid I have to disagree with the author. I think a lot depends on the individual, since we all learn differently. In my experience, once you’ve learned a programming language or two, it’s very easy to learn another one, especially if they’re similar in their approach. C++, Java, and C# come to mind as languages that are very similar. Perl and PHP are two others. Having worked extensively with Perl, it only took me a weekend to get really comfortable with PHP. That didn’t make me a PHP expert, but it is enough to allow me to work with it easily enough to gain that expertise.

    I can easily learn from books and videos, but find that just sitting down and writing the code works best for me. I have an engineering degree, so I tend to think more applied/hands-on than in theoretical ways. I work better when just solving a problem than in studying theory, but that’s me. Others may learn better in a different manner, so you can’t really make blanket statements about all of us.

    Using languages like PHP, ASP, and JSP is another area of similarity, since they all operate in a similar fashion within the HTML page itself, so once you’ve used one of these, you can apply that approach with the others. For me, the biggest factor is in learning the tools, libraries, and syntax differences between languages. Overall programming and software engineering (yes, they are different things) is not dependent on language or tools. Once you have that part down, then you just need to gain the specifics.

    Most of the languages that come out of a C-like style are easy to learn, once you’ve worked with one of them. The key is learning to program and debug and not depend on the tools to do it for you. Algorithms and design patterns can apply no matter what language you use to implement them.

    Another thing that bugs me is SQL. SQL is SQL is SQL, no matter what database you’re using (I’m not talking about the NoSQL dbs,though). Yes, each DB has its own features and enhancements, along with different approaches to tuning and writing functions and stored procs, but the basics of SQL apply everywhere. Some of these job descriptions you see are just nuts, requiring very specific things that are just unnecessarily narrow in focus. Lately, I’m seeing loads of jobs where they seem to be looking for a graphic designer/UX expert/and software engineer all rolled into one. Most developers are not graphic artists and “user experience” is a relatively new concept (in terms of how the companies are defining it, anyway) and you don’t usually find all of this in a single person. Sure, we developers can design user interfaces that look nice and work well, but how many of us have training in things like “color X is better for sales click-throughs” or “shape B for shopping cart buttons drives more purchase than shape C”. Oh, and they also want these people to be skilled in full-stack development, SEO, and system administration, too.

    It’s crazy. We’re good, but we simply can’t all be experts in every technology, much as we’d like to. The problem is getting hiring managers to understand that in most cases, the skills we do have can be applied to the problem they’re trying to solve, despite lacking experience with a particular tool or language. I’m not saying that someone who has never coded on Windows can jump in and crank out complex C#.Net applications, but someone who has worked with related technologies and has experience in a variety of development environments, tools, and languages should have no problems with that. Too bad we can’t convince people of this.

  12. BY Stimpy says:

    I am learning to play poker. No more interviews to Ace. If I can scrounge up the buy in I’ve got the gig. Yeah, only 10% of the tournament players “cash” but I’ll take my chances. This seems like a better way to live by my wits than to spend endless hours trying to keep up with the latest SW tools/fads and then to go begging for a job. No age discrimination either — they don’t care if your hair is grey when you buy in.

Post a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>