Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I started out by teaching myself BASIC on a Vic 20, and in college (mid 80's) I had Fortran, Pascal, limited C, machine and assembler (With a smattering of COBOL) as part of a computer science minor in college. I didn't touch programming from approx 1989 to 1999.

At that point, I was lucky enough to get hired as a Clipper programmer. Took me about 6 months to learn most of it, and by now (13 yrs) I'm pretty expert in it. I have also picked up Cold Fusion, some C#, some ASP, SQL, etc. I know programming structures, but in most modern languages I'm missing the esoterics, and I know my code could be much tighter.

The problem is that I've learned what I needed to, to get the job done. This results in a lot of gaps in practical knowledge. I am also missing out on a TON of theory. Things like SRP, Refactoring, etc are alien terms. (Although I grok the intent after a short read).

In addition, I am in the position now of teaching junior programmers the company and our software, and I don't want to pass on the knowledge gaps. I know this is somewhat of a subjective question and may be closed, but how do you go back and pick up what you've missed?

share|improve this question
2  
Read books, articles or get the knowledge the hard way: experience. –  mcwise Jul 2 '12 at 21:12
    
if you have been a programmer that long and have been halfway decent you already know most everything worth knowing, a lot of theories are nice ideas that break down in real world examples, refactoring is a poster child for this, its nice to fix bad but working code when you have the time, but having the time to fix bad but working code is so rare its irrelevant. –  Ryathal Jul 2 '12 at 21:29
    
Go to industry conferences and "meetup groups" on meetup.com. Or watch their session videos online. –  user16764 Jul 2 '12 at 22:23
    
Or you know...that whole education thing. –  Rig Jul 2 '12 at 22:29
add comment

4 Answers 4

up vote 7 down vote accepted

I think rather than trying to pickup where you left off, you should adopt a mindset of refusing to let knowledge gaps slip by from now on. In a field as rapid as CS, there's not much to pick back up that is still relevant to moving forward today. Learn some new languages. Take a look at dynamic programming. Be productive in your company and make sure you can teach the new guys the skills specific to your job. Rather than be embarrassed if they know a trick you don't, just be honest and have them explain it to you. Let it be a learning experience for everyone. If they don't have terrible attitudes then there is nothing to worry about.


If you want to catch up on buzzwords, just pour through Wikipedia or SO reading about one technology to the next. Google anything you don't know or need more resources on. Here are a few suggestions for moving forward:

  • Learn a modern version control system like Git, Bazaar, or Mercurial. It's not that hard to become a Pro Git user.
  • Look at modern dynamic typed scripted programming languages and functional programming. Ruby, Clojure, and Groovy are good ones. You might even take a look at D, the dynamic-ish successor to C++.
  • Java, Objective C, and C# are super popular right now (more so than C++ it seems). Make sure you know your object oriented design patterns.
  • Know regular expressions. They will never go out of style.

    * If you've got the discipline, read: The Theory of Computation by Michael Sipser.

  • PHP is old news -- Django and Rails are the new fads.
  • Parallelization, threading, and event driven programming are imperative for modern GUI programming.
  • SCRUM and Agile Software Development.
  • CoffeeScript.

Anyway, those are just a few suggestions on where to start brushing up your skills. But in the end, nothing beats cold hard experience. If you don't think you have enough, find a problem you think you can solve and tackle it in the best way possible. What I mean is make something that works well -- not just works. It may take you more time researching to find the correct solution than actually coding it, however, there is a world of difference between copy-paste coding and actually writing something beautiful.

Oh and for the record, refactoring is simply changing the method by which some work is done (presumably making it more efficient or better) without destroying the integrity of the work being done.

share|improve this answer
    
Scala has strong and static typing. It also is compiled. I think you mean something else. –  K.Steff Jul 2 '12 at 22:08
    
It was originally Closure but I second guessed myself and changed it to Scala which does not make sense. You're right I did mean something else d= –  David Cowden Jul 2 '12 at 22:12
    
While I agree with many of your points, some are a bit overly specific for what JohnP probably really needs. He could use a primer on what would be considered some of the fundamental basics of modern programming practices, including (though certainly not all-inclusive) object-oriented design patterns, unit testing, agile practices, and refactoring (not to mention the classics like the Single Responsibility Principle and Don't Repeat Yourself). You list good things for John to eventually research, but many of them are too broad to be useful to him at the moment. –  Derek Jul 2 '12 at 22:14
1  
@DavidCowden - Stop with the edits man, I've read your post 12 times now :D :D. Seriously though, thanks. It's a lot more useful than "I'm unqualified and can't learn it on my own". Oh, and thanks for the uptick on git. I just started looking at that, we are still using sourcesafe. :/ –  JohnP Jul 2 '12 at 22:22
2  
@PachinSV - Yes, but PHP is not an ideal language from which to learn good coding methodologies. See Jeff Atwood's take on it. –  Derek Jul 2 '12 at 23:19
show 12 more comments

One of your best resources is the junior programmers you are about to train. Between you there is experience and formal training.

Don't be scared to treat them as less experienced peers, rather than subordinates. If you are like me, you may need to park your ego at the door when you arrive at work, but its worth it.

I have over 25 years work experience and work with a guy who wasn't born when I graduated university. In some (many) things, he can run rings around me, and the master becomes the student.

share|improve this answer
add comment

You get senior developers to mentor you.

The fact that you are older does not make you more senior, necessarily, and you shouldn't be training juniors. You are right to be concerned that you won't teach them as well as you might. The kind of skills that you are lacking are exactly the kind of skills you need to consider yourself a senior and I'm sorry but I don't think they can be learned properly off-the-job.

But, if any book can set you in the right direction, it's probably Robert Martin's Agile Software Development, Principles, Patterns, and Practices.

share|improve this answer
    
There are two senior programmers, myself and another. He has less formal training than I do, and we've been with the company approx the same timeframe. The next closest has 3 years experience and just finished his degree online. I have had formal training in college, it's just very very dated, which in the CS world means less relevant. Thanks for the recommendation on the book. –  JohnP Jul 2 '12 at 22:21
add comment

Get to some online university and learn some courses. I think you should learn Virtual University of Pakistan Courses. There are Software Engineering and Progarmming courses that are taught in good detail. Patterns and all. And others have good books that you should be reading. So start learning.

share|improve this answer
add comment

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.