tags:

views:

446

answers:

18

I've been programming for several years now and since then I have learned several concepts and techniques that have made me a better programmer (i.e. OOP, MVC, regex, hashing, etc). I feel too that by been able to learn several languages (basic, pascal, C/C++, lisp, prolog, python) I have widen my horizons in a very possitive way. But since some time ago I feel like I'm not learning any new good "trick". Can you suggest some interesting concept/technique/trick that could make me retake the learning flow?

A: 

I would look at some of the newer languages that combine OO and functional elements, like C# or Scala.

MattK
+3  A: 

A good paradigm shift always allows you to see things differently and become a better developer. I would suggest you read up on functional programming and maybe learn a functional language like Haskell or Scheme.

Andrew Hare
Aww man! Did you have to use the phrase "paradigm shift"? =P
gnovice
and I just came from the buzzword thread and saw this :P
geocoin
mmmm Haskell. My eyes opened when I used Self.
Aiden Bell
gnovice, you should try leveraging paradigm shifts to maximise your ROI while providing synergistic solutions.
Bayard Randel
The good news is that paradigm shifts often bring everyone together to drive up the bottom line while enabling key players to realize their maximum potential.
Andrew Hare
+1  A: 

AGILE and especially Test Driven Development. Best thing to happen to software development since the invention of Object Oriented Design.

Eric
A: 

Copy/paste technique

User
This one is probably the best productivity boost possible, as soon as you leave your company within three months.
Jem
You won't believe it but that's how I'm supposed to work. Copy/reuse all that is possible, even the standard comments from one code file to another. Mandate from the director.
User
+1  A: 

Concerning coding, I'd say design patterns and architecture patterns are always nice to look at and can help you write cleaner/better code.

For methodology I would advice Agile development that is great. There are a numerous number of techniques and methods (I'm personally fan of extreme programming) and reading that can keep you busy and improve your general approach.

Finally I'd say learn new languages like Ruby

marcgg
+2  A: 

Learning how to use your IDE and tools. This to me resulted in a far greater productivity increase.

For examples:

  • learning how to use a source level debugger
  • using tools like purify/boundschecker
  • fxcop

etc. I realize I am dating myself, but those were big steps. There are many more.

Any time you can change the way you think about a problem or solve a problem without having to undo previous work is HUGE gain. Process, tools, etc all can help with that. Don't limit yourself to finding silver bullet techniques for productivity gains.

Watching productive people work and getting them to tell you what they are doing and why is also invaluable.

Tim
+1  A: 
Garrett
+2  A: 

If I'm honest, using, and learning a great framework like .NET has really increased my productivity.

I'm often amazed what people are willing to reinvent due to their ignorance that the very same function already exists in the framework.

Galwegian
+1  A: 
  1. Design Patterns. Learning how to break dependence upon implementation and inheritance, and depending on interfaces (contracts) instead changed the way I think about programming.

  2. Debugging. Once I figured out how to actually step through the code and go line-by-line, examining the underlying state, it revolutionized how I troubleshoot code.

  3. Practice, practice practice: I didn't realize how important it is to keep working on my skills apart from work until a relatively short time ago. Mistakes and solutions I make at home make me a better programmer at work, and vice a versa. Learning should never stop if you want to be good at something, and programming isn't an exception.

bedwyr
A: 

Learning Smalltalk has helped me become more productive. It is an easy language to learn and things can be built extremely quickly. For a stunning productivity aid check out Seaside, it's a framework for building web applications. Moreover, if you have only been used to curly brace languages Smalltalk will also make you smile!

KHWP
Whoo Smalltalk. Squeak seems interesting too.
Aiden Bell
Yes, Squeak is a dialect of Smalltalk and Squeak 'one click' images exist with Seaside and friends pre-loaded.
KHWP
A: 

I was helped by the following paradigms in this order:

1) bottom-up programming 2) top-down programming (C, Pascal) 3) object-oriented programming (Smalltalk, Java) 4) functional programming (lisp, Mathematica)

with some logic programming thrown in (prolog).

A: 

If I had to pick just one, I'd say Test-Driven Design, aka TDD: write unit tests (and check that they fail) before you incrementally add features.

Alex Martelli
A: 

nHibernate hands down. The fact that I dont need to write database functionality for my business objects is very useful and time saving.

Devtron
A: 

Try to learn to see things from the user's standpoint. For example:

  • learn how to write meaningful error messages
  • learn how to produce usable applications
  • learn some basic speed-optimization techniques

Remember that the user sees your application, not your code.

friol
+3  A: 

YAGNI (You Ain't Gonna Need It) and DTSTTCPW (Do The Simplest Thing That Could Possibly Work)

It's easy to spend a lot of time thinking about edge cases, and find that you've implemented something that's completely useless. I believe that a far better approach is to knock out a simple prototype, and then poke and prod it until you understand the domain well enough to create production code.

Recognize, however, that your prototype is going to evolve into production code whether you like it or not. So write it with that in mind.

kdgregory
I view YAGNI and DTSTTCPW a but differently I think. I try to advocate simpler solutions to problems. Don't try to predict the future! Solve your problems the clearest and simplest way possible, just be ready to change the code when needed.
Aardvark
+1 I am not a big fan of roping in a bloated framework at 1-billion lines when I can code what I want, how I want, in 500 lines as a replacement in a day.
Aiden Bell
+1  A: 

VIM Quick Reference Card. After I started using advanced vim (macros, plugins) I have stopped doing any repetitive actions during coding manually.

Apart from that, Scrum and working at night, when noone interrupts You gave me the highest benefit.

Reef
+1 Second. I have a VIM card on the underside of my glass desk so I can see it under my wrists!
Aiden Bell
A: 

High level understanding, creating good abstractions with proper dependencies, is what pays off in long term. For example, Law of Demeter is an important guideline. I recommend also reading Eric Evan's Domain Driven Design

egaga
+1  A: 

If you want to expand your experience into web programming, you should try and get a good handle on the HTTP Request/Response paradigm. This will make creating web apps much easier on you because you understand the underlying framework.

(http)://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

Robert Greiner