Take the 2-minute tour ×
Personal Productivity Stack Exchange is a question and answer site for people wanting to improve their personal productivity. It's 100% free, no registration required.

After developing small-scale web applications for about 5 years in the late 90s and early 2000s, I decided to take a new career path. However, I've got the programming "bug" again and for the last couple of months have been aggressively refreshing on old, once-familiar technologies and learning new-to-me ones like Python/Django and jQuery. And after getting back into it, I forgot how much I missed it and now want to seriously consider pursuing development again as a career.

The first task I set for myself (after my "phase zero" programming re-education) was coming up with realistic and useful projects I could work towards completing to build a portfolio. I've drawn up diagrams for the high-level frameworks and workflows for a handful of such projects, and in my mind I can see them clearly -- objectives, design, interfaces, data models, all the conceptual things that define a project and make the actual coding easier. So I have goals to work towards and motivation to complete them.

It's the next step that I'm having trouble with. I know how I want my apps to look and work, and I know what tools I need to learn to make them happen. My problem is that I'm torn between "I want to learn how to do X and Y things in A and B languages" and "I need to focus on mastering A and then B so I can properly do X and Y" -- impatience vs. diligence.

Right now I fear learning one language only to forget it when I move on to the next one. Recently I learned the fundamentals of Python and developed a couple of applications that helped me learn the language and become comfortable with the reference docs to improve those apps as I learned more. Now I'm learning Django so I can translate that knowledge to web apps. But when I start to learn jQuery and refresh on HTML5, JavaScript and CSS3, I don't want the Python/Django knowledge to become stale.

How do you combat the impatience of wanting to see your finished work and balance it with the diligence of properly learning the tools and methodologies (like testing) you know you need to see the projects through to completion?

share|improve this question
1  
You're doing it wrong. Just code in JavaScript with NodeJS server-side and and then you don't have to learn any other languages, ever ;-) –  w00t Aug 14 '13 at 12:18

5 Answers 5

Often the best way of learning is "learning by doing" and it's essential in the way that only studying a language without using it in real life will never work. So if you only need a casual understanding of the languages you talk about, then using a simple tutorial and a live project as a way to get into the language is normally fine. In these cases there is no conflict between wanting to see the project finished and learning the stuff.

In other cases, some concepts are just too complex to understand by "learning by doing". You will need to read some thick books. When that happens, you just need to keep thinking about the rewards down the road that will come following hard work, persistence and discipline.

share|improve this answer
    
so there is no shortcut to avoid reading thick books? –  jitsCode Dec 20 '13 at 7:45
    
@BadaBoom: Sometimes there's no substitute. No pain, no gain. –  Gruber Dec 20 '13 at 16:10

I am a developer as well, and I can tell you that... learning is always good. However there seems to be 3 general paths in the industry:

  • Get Stuck - You are only needed to complete certain tasks, nothing more. The company you are working for (because this does not apply to freelancers) will actively hold you back, and question you every time you want to "become better". Leave this company ASAP srsly.

  • Master of X - Here the goal is to learn "what else can I add to X", I despise this particular approach because it creates a lot of code monkeys, however from a software engineering (and companies) point of view it is a very good option.
    Take for example Java, where the language can be learned in a couple of days. Then you realize that there are lots of libraries which may take several days to learn by memory, some are so used that they become a must in some projects (eg. POI from Apache), BUT it gets a lot worse... there are lots of frameworks for all layers and all sorts of things.
    You already know what this is like, because most of the industry is like this, specially with Java or .NET, where you never move out because there are so many areas you can cover with a single language|technology.
    And again I tell you, this is totally fine for stability, but most of the times it means to become stale, and you may even "lose" creativity.

  • Jack of all trades, Master of none - Now, this is probably what you are trying, and it is what I like. I approve your decision to keep moving, OP.
    This particular path is kind of like... imagine you are reading a magazine, and when you finish, you close it and you can either not remember half of the content, or you can remember most Headlines. IMO you should always remember the headlines. The content is not as important.
    It may still not be clear what do I mean by that, so... basically what I mean is that you don't have to remember that in Javascript document.createElement("tag-name") creates a <tag-name/>, but you should remember that it is possible to do so.

    • Note: This is probably not the best for companies because you could be slower, specially because you will end up Googling "create element javascript" because "I know that I can, but I can't remember", but it's more fun! :P

.

Finally as it has been pointed by others, you are supposed to understand a solution (program), not to be a code monkey who only translates requirements into code.
As long as you are not a code monkey, languages are irrelevant.

share|improve this answer
    
FINALLY!!!! A developer who gets it. Programming is change..movement... it's water. Can't be chilling on one language for years. Ain't "nobady" got time for that! :) –  Joshua Areogun Aug 23 '13 at 18:39

I differntiate knowing a language to being flutent in it. Unless you have remarkable memory ability, you will always be more fluent (require fewer references) in the languages you are currently working with the most. Good programmers rely more on being able to generalize concepts and figure things out rather on pure memorization.

So how does that answer your questino? First, don't be afraid to learn a new language at the expense of the old ones. And don't beat yourself up over it and think you are less marketable. Rely on your ability to pick them back up very quickly. At some point, everyone Googles something. The key is to only need to find the syntax and appropriate names for things and not relying on entire blocks of code written by someone else.

This does not mean you shouldn't try and be an expert of at least one language. Don't miss out on higher-level learning opportunities just because you would rather write "Hello World!" in 500 languages off the top of your head.

share|improve this answer

From experience, front-facing technologies like Django, Rails, and jQuery are best learned by doing. Just build what you know, and slowly start pushing forward into uncharted territory—Google and StackOverflow are your friend. I was afraid that I'd forget stuff I'd used to do, but from experience it's more like finding an old skill and just dusting it off again—you really don't forget it, and once learned it doesn't go stale.

Best of luck!

share|improve this answer

You shouldn't worry about forgetting the languages. What I do is make a few apps with good documentation. I know that if I don't write on the language for let's say 6 months I just have to read these apps and I will regain most of my knowledge. This is the first approach.

The more common approach is to disregard the syntax of the language. Basically if you know how it has to happen (in theory) then you can basically figure out the syntax of the system without a problem. It might take some time, but you will manage.

note that there is a small price to pay for knowing multiple languages and programming paradigms.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.